存储函数错误:找不到能够从类型转换的转换器

Posted

技术标签:

【中文标题】存储函数错误:找不到能够从类型转换的转换器【英文标题】:Stored Function Error: No converter found capable of converting from type 【发布时间】:2019-04-03 11:55:09 【问题描述】:

我在 PostgreSQL 中创建了存储函数。我在 PostgreSQL 中得到了正确的结果。但是当我尝试使用本机查询调用 spring data jpa 中的存储函数时。我收到以下错误。

No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [com.spacestudy.model.ClientRT]"

存储库

@Repository
public interface ClientRoomTypeRepository extends JpaRepository<ClientRoomType, Integer> 


    @Query(nativeQuery = true,value = "select * from roomtype(:int_inst_id)")
    List<ClientRT> roomtype(@Param("int_inst_id")Integer int_inst_id);    

结果类 ClientRT

public class ClientRT 

    public Integer res_nclient_room_type_id;    
    public String res_sclient_rt_desc;
    public String  res_sclient_rt_name;
    public String res_sclient_rt_code;
      //getter and setter
      ...

PostgrSQL 结果

【问题讨论】:

ClientRT 是一个实体吗? 不,这不是一个实体。我创造的只是为了回报 那么jpa如何将结果映射到那个POJO呢? 表示返回类需要作为一个实体。但我在 db 中没有那个表,那么有没有其他方法可以返回它 那么你必须实现自己的逻辑来从对象中获取数据并将其设置为 POJO。 【参考方案1】:

您可以使用我在项目中使用过的类似逻辑,该逻辑可能对您有用,也可能不适用。我没有将它与 JPA 对象映射一起使用。

public class ObjectSerializer 

private static ObjectMapper objectMapper;

@Autowired
public ObjectSerializer(ObjectMapper objectMapper) 
    ObjectSerializer.objectMapper = objectMapper;


public static <T> T getObject(Object obj, Class<T> class1) 
    String jsonObj = "";
    T userDto = null;
    try 
        jsonObj = objectMapper.writeValueAsString(obj);
        userDto = (T) objectMapper.readValue(jsonObj, class1);
        System.out.println(jsonObj);
     catch (JsonProcessingException jpe) 
     catch (IOException e) 
        e.printStackTrace();
    
    return userDto;

希望这会有所帮助。

【讨论】:

我将存储库方法的返回类型更改为List&lt;object&gt;。我得到了结果,但不是 json 格式 [[ 1, "TEMPORARILY NOT ASSIGNED", "TEMPORARILY NOT ASSIGNED", "000" ], 使用此方法并将对象与要转换的 pojo 一起传递给它。希望这会有所帮助。 这个 crt 是 sp 的结果:List&lt;Object&gt; crt=crtRepo.roomtype(60); 我应该在 obj 的地方通过 crt 是的,你应该在 object 的地方传递 object 和任何类来设置数据到那个地方,在 class 的地方。 点赞public static &lt;T&gt; T getObject(Object crt, ClientRT class1)

以上是关于存储函数错误:找不到能够从类型转换的转换器的主要内容,如果未能解决你的问题,请参考以下文章

使用 GORM 获取 Mongo 集合时,找不到能够从 java.lang.Double 类型转换为 java.lang.Long 类型的转换器

Spring Boot Jpa 1.4.0 - 找不到能够从类型 [java.util.HashMap<?, ?>] 转换为 Pojo 类型的转换器

错误C2678:二进制'+':找不到运算符,它接受类型为'volatile A'的左手操作数(或者没有可接受的转换)

找不到存储在数据集中的类型的编码器。尽管提供了适当的隐式,但错误[重复]

将图像从 CV_64F 转换为 CV_8U

如何应用自定义渐变:类型转换错误