Hibernate Criteria等效于子查询中的IN子句?

时间:2011-09-08 07:41:02

标签: java hibernate java-ee jpa ejb

我想翻译像这样的查询:

FROM Entity_1 obj
WHERE obj IN (FROM Entity2) OR 
      obj IN (FROM Entity3)

要暂停条件表单,官方documentation of Hibernate是不够的,因为它没有说明如何应用IN语句。

任何提示?

1 个答案:

答案 0 :(得分:9)

条件API没有规定添加另一个查询作为限制..我认为@Niroshan Abayakoon试图说的是你需要分别执行IN条款的查询&将结果添加到Restrictions.in()条件。

List<?> entity2Data=//get data from either a query or criteria
List<?> entity3Data=//get data from either a query or criteria
Criteria c = // obtain criteria from session
// basically creates an OR condition chain
Disjunction orConditions = Restrctions.disjunction();
orConditions.add(Restrictions.in("obj", entity2Data));
orConditions.add(Restrictions.in("obj", entity3Data));
c.add(orConditions); 

这会让hibernate考虑IN子句中的列表。

在这种情况下,最好还是回到HQL。