Spring Data JPA派生查询报错:Cannot join to attribute of basic type
派生查询写法错误原因解析
你遇到的BasicPathUsageException异常,核心原因是Spring Data JPA对派生查询中下划线_的解析逻辑:
- Spring Data JPA里,下划线
_是用来导航关联实体的属性的。比如如果你的Contract实体里有一个关联的Customer实体,那findByCustomer_Name这种写法是合法的——这里的_用来表示从Contract导航到关联的Customer实体,再访问其name属性。 - 而你的
contractDate是LocalDateTime类型,属于JPA的基本值类型(不是关联实体)。当你写ContractDate_Year时,JPA会错误地把它解析成:要对contractDate这个属性执行join操作,去访问它的year关联属性。但基本值类型不存在关联关系,自然就抛出了Cannot join to attribute of basic type的异常。
简单总结:下划线是给跨实体关联查询用的,不能用来直接访问LocalDateTime这类基本值类型的内置字段(比如year、month)。
内容的提问来源于stack exchange,提问作者Javid A.
相关产品推荐
相关产品推荐

