java - JPA 查询存在于

标签 java hibernate jpa jpa-2.0 jpql

我有以下实体(针对此示例进行了缩减和重命名)

@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 版本,因此您的选项至少包括:

  1. 使用 JPQL 查询并切换到其他 JPA 实现
  2. 改用 HQL 并坚持使用 Hibernate:

    query += "AND '"+importantCaseNum+"' in elements(caseNumbers)";

关于java - JPA 查询存在于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270761/

相关文章:

JAVA:BigO 算法 - equalsIgnoreCase 和 CompareTo

java - Mysql驱动本身是否实现了DataSource接口(interface)?

java - Hibernate 可以在性能敏感的应用程序中使用吗?

java - JPA 转换器 (EclipseLink) 中的 CDI 注入(inject)类

java - Lotus Domino C# LtpaToken 类

java - 日期数据结构的 Joda 等价物

spring - 如何在 JPA 中明确声明一个实体是新的( transient 的)?

java - Hibernate能否映射a的结果集 1 :M join in a subselect to a parent with a child collection?

java - 我可以在实例化时设置一个带有期望(验证)的 Mockito 模拟吗?

java - 如何创建支持通用 ID(包括自动生成的 ID)的通用实体模型类?