JPA派生查询含Matches属性时失效问题排查
问题原因解析
这是因为Spring Data JPA的派生查询方法解析器内置了一批查询关键词,Matches就是其中之一,它用于实现字符串匹配类的查询逻辑(类似SQL的LIKE查询)。
当你定义findByPlayedMatches方法时,解析器会按内置规则拆分方法名:
- 把
PlayedMatches拆分为属性前缀Played和查询关键词Matches - 进而尝试在实体类中寻找名为
played的属性,自然找不到,所以抛出属性不存在的错误
而将属性名改为playedGames后,Games不属于Spring Data JPA的预定义查询关键词,解析器会把PlayedGames完整识别为属性名的一部分,因此能正确匹配到实体类的playedGames属性,查询方法正常运行。
如果要避免这类问题,有两种可行方案:
- 避开使用Spring Data JPA预定义关键词作为属性名的后缀或组成部分
- 若必须保留原属性名,可使用
@Query注解手动编写JPQL查询语句,跳过方法名的自动解析逻辑
内容的提问来源于stack exchange,提问作者K D
相关产品推荐
相关产品推荐

