对Hibernate(和JPA)标准表达能力的限制?

我在层次结构中有4个实体,如下所示:

Parent | ------------------------ | | | Child1 Child2 Child3 

我有兴趣在单个Query中使用条件检索Child1和Child2的所有实例(但不是Child3实例)。

使用HQL(或JPQL)很容易做到,如下所示:

 FROM Parent obj WHERE obj IN (FROM Child1 where fieldOfChild1="aa") OR obj IN (FROM Child2 where fieldOfChild2=55) 

我已经研究了Hibernate Criteria和JPA Criteria API,但我找不到将此查询表达为Criteria的方法

这是Criteria API的限制吗? 还是只是我错过了路? 任何提示?

如果映射中的每个子类都有一个鉴别器值(例如,1表示Child1,2表示Child2,3表示Child3),您可以在HQL / Criteria中使用特殊属性“class”。

所以标准查询可能是这样的:

 session.createCriteria(Parent.class) .add(Restrictions.or(Restrictions.eq("class", 1), Restrictions.eq("class", 2))) 

并简化了您的HQL查询:

 FROM parent WHERE class = 1 OR class = 2 

好吧,你说你没有在评论中映射你的class级层次结构,对吗?

因此无法使用Criteria构建对Child1和Child2的查询。 事实上,我认为你的HQL示例不起作用,因为未映射Parent。

一个丑陋的解决方案是查询时间,Child1的Criteria查询和Child2的另一个Criteria查询。 然后在java代码中合并两个结果列表:(或映射层次结构:)