Spring Data JPA查询如何避免属性名中的And被识别为查询关键字
解决方案
有两种常用方式可以解决属性名包含查询关键字的解析问题:
- 方案1:使用下划线显式标记属性边界
Spring Data JPA 提供了_作为属性拆分的显式标识,用来避免框架自动将属性名内置的And/Or等关键字识别为查询谓词。你可以将Repository方法修改为如下写法:
interface EmployeeRepository extends Repository<Employee, Long> { List<Employee> findBy_TravelDistanceAndTimeId(long travelDistanceAndTimeId); }
框架识别到下划线后,就会将下划线后的TravelDistanceAndTimeId作为完整的属性名解析,不会再拆分中间的And关键字。
- 方案2:使用@Query注解手动指定查询逻辑
如果觉得下划线写法可读性不高,也可以直接通过@Query注解手写JPQL语句,完全绕过方法名解析的规则,写法更直观不易出错:
import org.springframework.data.jpa.repository.Query; interface EmployeeRepository extends Repository<Employee, Long> { @Query("SELECT e FROM Employee e WHERE e.travelDistanceAndTimeId = :travelDistanceAndTimeId") List<Employee> findByTravelDistanceAndTimeId(long travelDistanceAndTimeId); }
内容的提问来源于stack exchange,提问作者tuesday
相关产品推荐
相关产品推荐

