You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring JPA查询抛出String转UserDetail无转换器异常如何解决

问题根因

你的Repository层原生SQL仅查询了phoneNumber、textMessage两个字段,JPA原生查询默认会将多字段返回结果封装为Object[]类型,而你声明的方法返回值为UserDetail实体类,Spring没有内置转换器可以把两个字段的查询结果直接映射为完整UserDetail对象,因此抛出转换器找不到的异常。
另外你的SQL语法存在错误:FROM UserDetail entity usd中多写了无效的entity字段,需要删除避免后续SQL执行报错。

解决方案

根据你的业务需求可以选择以下任意一种方案:

  • 方案1:查询全量字段直接映射实体
    若业务需要完整的UserDetail实体数据,将SQL修改为查询表内所有字段即可:
    @Query(value = "SELECT usd.* FROM UserDetail usd WHERE usd.created_date=:createdDate", nativeQuery = true)
    UserDetail findByCreatedDate(LocalDateTime createdDate);
    
  • 方案2:定义投影接口接收指定字段
    若业务仅需要phoneNumber、textMessage两个字段,先定义对应投影接口:
    public interface UserDetailProjection {
        String getPhoneNumber();
        String getTextMessage();
    }
    
    再修改Repository方法返回值为投影接口:
    @Query(value = "SELECT usd.phoneNumber,usd.textMessage FROM UserDetail usd WHERE usd.created_date=:createdDate", nativeQuery = true)
    UserDetailProjection findByCreatedDate(LocalDateTime createdDate);
    
    Service层对应修改返回类型即可,调用投影接口的get方法就能获取对应字段值。
  • 方案3:自定义结果转换器(仅复杂场景推荐)
    你也可以手动实现Spring的Converter接口,将查询返回的Object[]手动映射为UserDetail对象,不过简单场景下没必要使用该方案。

内容的提问来源于stack exchange,提问作者iwritecomeinmymind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:36:03