JPA查询存在于

问题描述 投票:3回答:1

我有以下实体(为此示例缩小并重命名)

@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来扩展查询,一旦重要数字列表高于1,它就不起作用。没有返回任何值。

for (String importantCaseNum : importantCaseNumbers) {
    query += " AND '"+importantCaseNum+"' in (caseNumbers)";
}

任何建议/指针赞赏。我想我要找的是一个case.caseNumbers包含(importantNumbers)子句。

更新我已经恢复到我的查询的本机SQL,因为我不想通过使用HQL将自己绑定到hibernate。感谢@soulcheck和@mikko帮助我。当hibernate JPA修复程序可用时,我会发布。

谢谢保罗

java hibernate jpa jpa-2.0 jpql
1个回答
1
投票

构建此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)”;
© www.soinside.com 2019 - 2024. All rights reserved.