我有以下实体(针对此示例进行了缩减和重命名)
@Entity
public class Case {
@Id
private Long id;
@ManyToOne(optional=false)
private CourtConfiguration courtConfiguration;
@ElementCollection(fetch=FetchType.EAGER)
private List<String> caseNumbers;
}
第二实体
@Entity
public class CourtConfiguration {
@Id
private Long id;
String countyId;
String referenceId;
....
}
我正在尝试使用 JPQL 搜索所有具有特定 courtConfiguration countyId 且 caseNumbers 包含所有已提供的重要 caseNumbers 集的案例。
所以我的查询需要 countyId 和一组 caseNumbers 作为参数。分别调用了 countyId 和 importantCaseNumbers。
我试过但没能成功。
我的查询是这样的
String query = "SELECT case FROM Case case JOIN case.caseNumbers caseNumbers WHERE ";
query += "case.caseConfiguration.countyId = :countyId ";
在我添加我的 caseNumber 条件之前,上面的代码一直有效。 我已经尝试了一个 foreach importantNumbers 来扩展查询,并且一旦重要数字列表超过一个它就不起作用。没有返回任何值。
for (String importantCaseNum : importantCaseNumbers) {
query += " AND '"+importantCaseNum+"' in (caseNumbers)";
}
任何建议/指示表示赞赏。我想我要找的是 case.caseNumbers contains (importantNumbers) 子句。
更新 我已将查询恢复为 native SQL,因为我不想通过使用 HQL 将自己绑定(bind)到 hibernate 状态。感谢@soulcheck 和@mikko 帮助我。当 hibernate JPA 修复程序可用时,我会发布。
谢谢 保罗
最佳答案
构建此 JPQL 查询的语法正确方法是使用 MEMBER OF。但是由于HHH-5209中报告的问题它不适用于旧的 Hibernate 版本(修复版本 4.1.8、4.3.0.Beta1)。根据此查询的错误报告 HQL 版本,因此您的选项至少包括:
- 使用 JPQL 查询并切换到其他 JPA 实现
改用 HQL 并坚持使用 Hibernate:
query += "AND '"+importantCaseNum+"' in elements(caseNumbers)";
关于java - JPA 查询存在于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270761/