Spring Data JPA中In子句搭配OrderBy查询报错如何解决
问题原因
- Spring Data JPA 解析方法名时,
In是条件匹配关键字,你在ZonesIn后额外加了And拼接OrderBy子句,会导致解析器错误将InAnd识别为属性后缀,尝试查找zones属性下的inAnd字段,最终抛出PropertyReferenceException异常。
解决方案
方案1:修正方法名(最简单)
OrderBy 是独立的排序关键字,不需要用 And 和前面的条件拼接,删除 In 和 OrderBy 之间多余的 And 即可,修正后的方法名如下:
Page<Config> findByUserIdEqualsAndNameContainsAndZonesInOrderByUpdatedOnDesc(Integer userId, String name, List<Integer> zones, Pageable pageable);
方案2:使用@Query注解自定义JPQL(更灵活,适合复杂查询)
如果查询条件后续还有扩展,直接用@Query写查询语句可以避免方法名过长、解析规则踩坑的问题,写法如下:
@Query("SELECT c FROM Config c WHERE c.userId = :userId AND c.name LIKE CONCAT('%', :name, '%') AND c.zones IN :zones ORDER BY c.updatedOn DESC") Page<Config> searchConfigWithConditions(@Param("userId") Integer userId, @Param("name") String name, @Param("zones") List<Integer> zones, Pageable pageable);
业务层直接调用上面定义的searchConfigWithConditions方法即可。
内容的提问来源于stack exchange,提问作者vijaydeep
相关产品推荐
相关产品推荐

