Spring Data JPA中@Query查询无结果但方法命名查询生效原因问询
问题原因分析
- 你遇到的
@Query自定义查询返回空、方法命名查询正常的问题,和事务、代理机制没有任何关系,根本原因是手写JPQL语句存在语法错误。 - 你在
@Query的JPQL语句中给命名参数额外加了单引号',这会导致Spring Data JPA将:field1、:field2识别为固定字符串常量,而非需要绑定的动态参数。实际执行的查询逻辑等价于查找field1等于字符串:field1且field2等于字符串:field2的记录,自然永远返回空结果。 - Spring Data JPA自动生成的方法命名查询会自动处理参数绑定逻辑,不存在手动写JPQL时的语法错误,所以可以正常返回匹配数据。
修正方案
如果你要继续使用自定义@Query查询,只需要去掉参数外侧多余的单引号即可:
// 修正后的@Query写法,移除参数外层的单引号 @Query("SELECT e FROM MyEntity e WHERE e.field1 = :field1 and e.field2 = :field2 ") List<MyEntity> findEntityByField1AndField2(String field1, String field2);
补充说明
你之前尝试调整事务传播策略、自注入、给Repository方法加@Transactional注解的操作都无效,是因为排查方向完全偏离了问题根源,事务相关配置不会影响JPQL语法错误导致的查询结果异常。
内容的提问来源于stack exchange,提问作者Akhil Kooliyatt
相关产品推荐
相关产品推荐

