Java 中存在的JPA查询

Java 中存在的JPA查询,java,hibernate,jpa,jpa-2.0,jpql,Java,Hibernate,Jpa,Jpa 2.0,Jpql,我有以下实体(在本例中减少并重命名) 我正在尝试使用JPQL搜索所有具有特定法院配置countyId和包含所有重要案件编号的案件 所以我的查询需要countyId和CaseNumber集作为参数。分别称为countyId和ImportantCaseNumber 我试过了,但没能使它起作用 我的问题是这样的 String query = "SELECT case FROM Case case JOIN case.caseNumbers caseNumbers WHERE "; query

我有以下实体(在本例中减少并重命名)

我正在尝试使用JPQL搜索所有具有特定法院配置countyId和包含所有重要案件编号的案件

所以我的查询需要countyId和CaseNumber集作为参数。分别称为countyId和ImportantCaseNumber

我试过了,但没能使它起作用

我的问题是这样的

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.caseNumber包含(importantNumber)子句

更新我已恢复使用本机SQL进行查询,因为我不想使用HQL将自己绑定到hibernate中。感谢@soulcheck和@mikko帮助我。当HibernateJPA补丁可用时,我将发布

谢谢
Paul

构建此JPQL查询的语法正确方法是使用的成员。但由于中报告的问题,它不能与旧的Hibernate版本(修复版本4.1.8、4.3.0.Beta1)一起工作。根据bug report HQL版本,此查询有效,因此您的选项至少包括:

  • 使用JPQL查询并切换到其他一些JPA实现
  • 改用HQL并坚持使用Hibernate:

    查询+=“和元素中的“+importantCaseNum+”(案例编号)”


  • 你说的“它不起作用”是什么意思。例外?没有返回值?您能在使用foreach的地方发布代码吗?我更新了问题,以考虑到示例中未包含的联接。谢谢你花时间帮忙。我将在下一步为每个人发布。奇怪的是,只有当你添加了条件时,它才会停止。你确定你的箱子里有所有必要的重要号码吗?也可以尝试MEMBER OF,而不是IN。感谢的反馈,MEMBER OF似乎不起作用。我收到[main]错误org.hibernate.hql.PARSER-。感谢@Mikko的反馈,我很感激,我以前发现了错误报告,希望这个问题能在新版本中得到解决。当它被修复后,我会发布我正在观看错误报告的更新。链接不再有效链接到当前的Hibernate错误跟踪工具。
    String query = "SELECT case FROM Case case JOIN case.caseNumbers caseNumbers WHERE ";
    query       += "case.caseConfiguration.countyId = :countyId ";
    
    for (String importantCaseNum : importantCaseNumbers) {
        query += " AND '"+importantCaseNum+"' in (caseNumbers)";
    }