JPQL用MEMBER OF查询Hibernate ElementCollection字段报错如何解决
报错原因
JPA 2.1规范中MEMBER OF语法要求左操作数必须为常量或者传入参数,不支持使用实体的持久化字段作为左操作数,你之前的写法将c.testId放在MEMBER OF左侧,就会触发The basic field cannot be used as a state field path报错。
正确JPQL写法
你可以通过关联Tester的assignedTests元素集合做等值匹配实现需求,语句如下:
SELECT DISTINCT c.id FROM Customer c, Tester t JOIN t.assignedTests assignedTest WHERE t.id = :testerId AND c.testId = assignedTest
逻辑说明
- 用
JOIN t.assignedTests assignedTest将指定测试人员的所有已分配测试ID从集合拆为单行数据 - 直接将
Customer的testId和拆出来的测试ID做等值匹配 - 加入
DISTINCT是为了避免同一个测试ID被多次分配时返回重复的客户ID,你可以根据实际业务情况决定是否保留
该写法完全符合JPA 2.1语法要求,不需要提前传入testId参数,也无需使用原生查询或Criteria API。
内容的提问来源于stack exchange,提问作者Madie
相关产品推荐
相关产品推荐

