将HQL'in'限制转换为Criteria

时间:2011-09-05 12:26:06

标签: java hibernate hql criteria

我有这样的查询:

Query query = session.createQuery("from table1 c where c.colummewhatever =:value and (select p.colummewhatever from table2 p where c.fkidcolumme=p.idcolumme) in (:listPColummewhatever) ");

有没有办法将in限制转换为Criteria

2 个答案:

答案 0 :(得分:0)

在我看来,这个查询可以使用简单的连接重写:

from Table1 c inner join c.table2 p
where c.colummewhatever =:value 
and p.colummewhatever in (:listPColummewhatever)

现在,在Criteria中翻译这个HQL查询要容易得多。

这当然假设您在Table1和Table2之间存在关联,但您应该有一个关联。

答案 1 :(得分:0)

使用Criteria API应该是这样的......

DetachedCriteria dc = new DetachedCriteria.forClass(Table1.class,"c");
dc.createAlias("table2","p")
dc.add(Restrictions.in("p.colFoo",yourListFoo);
dc.add(Restrictions.eq("c.col",value);

List<Table1> = dc.getExecutableCriteria(session).list();