sw芒ee果t 2024-03-14 17:08 采纳率: 50%
浏览 1
已结题

SpringBootJPA规定方法名问题

Spring Data JPA 中,规定方法名查询是不是不能返回除了对应表映射的类,以外的数据。就是属性也不行。
比如:
有个User 类 ,里面有属性:
id,
name,
password,

findBy开头查询 返回的都是User或者List
用findIdByName,返回的也是User,而不是我预期得到的id

//我出问题的代码
public interface CAndSTableRepository extends JpaRepository<CinemaAndSchedulingTable,Integer> {
      /**
     * 根据 SchedulingData_Id 查找Id
     * @param schedulingId scheduling的Id
     * @return CinemaAndSchedulingTable 的Id
     */
    List<Integer> findIdBySchedulingData_IdIn(List<Integer> schedulingId);
}
//错误提示
Failed to convert from type [java.util.ArrayList<?>] to type [java.util.List<java.lang.Integer>] for value
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-14 17:09
    关注

    引自免费微信小程序:皆我百晓生

    在Spring Data JPA中,通过方法命名约定进行查询时,框架会根据方法名自动解析并生成SQL查询语句,并将查询结果映射到对应的实体类对象上。因此,当你的Repository接口继承了JpaRepository后,你定义的方法名如findIdBySchedulingData_IdIn虽然符合Spring Data JPA的查询方法命名规则,但框架仍会尝试将查询结果转换为实体类CinemaAndSchedulingTable的对象列表。

    针对你想直接获取id属性值的需求,Spring Data JPA并没有直接提供这样的功能。不过,你可以采用以下两种方式解决:

    1. 创建一个DTO(Data Transfer Object)类,包含你需要的字段(例如这里只需要id),然后在repository中创建一个自定义的@Query注解方法,手动编写JPQL或SQL查询语句来返回这个DTO类的实例列表。
    public interface CAndSTableRepository extends JpaRepository<CinemaAndSchedulingTable, Integer> {
        
        @Query("SELECT c.id FROM CinemaAndSchedulingTable c WHERE c.schedulingData.id IN :schedulingIds")
        List<Integer> findIdsBySchedulingDataIdsIn(@Param("schedulingIds") List<Integer> schedulingIds);
    }
    
    1. 使用 projections,Spring Data JPA提供了 projections特性以简化数据传输对象的使用。首先创建一个接口作为投影:
    public interface IdProjection {
        Integer getId();
    }
    

    然后在repository中这样使用:

    public interface CAndSTableRepository extends JpaRepository<CinemaAndSchedulingTable, Integer> {
        
        List<IdProjection> findByIdIn(List<Integer> ids);
    }
    

    在这两种解决方案中,第一种是通过自定义查询来实现,适用于复杂查询;第二种则利用了Spring Data JPA自带的投影机制,它能够从实体中提取出部分属性组成一个新的对象集合返回。对于你的问题,需要调整方法名和查询逻辑以便返回期望的数据类型。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 锌合金的耐温能到多少度。可以持续多长时间
  • ¥15 .net调用本地office组件出现问题
  • ¥15 docker镜像拉取失败请教教我
  • ¥15 https访问nginx上的http
  • ¥15 需要完整规则的五子棋博弈代码
  • ¥15 Hadoop的部署与安装的一些疑问
  • ¥15 短剧的sdk在哪里接入
  • ¥30 智能割草机自动化割草
  • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
  • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零