2011-09-05 53 views
4

转换HQL我有这样的查询:“在”限制条件

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

回答

0

在我看来,这种查询可以使用一个简单的重写加入:

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

在翻译这个标准HQL查询现在更容易。

这当然假设你有一个表1和表2之间的关联,但你应该有一个。

+0

以及TKS!....只是一个很小的问题,我不知道怎么翻译拼接为标准......同时,我已发现DetachedCriteria :) – Silvia

+0

您不需要DetachedCriteria来创建连接。你为什么不阅读参考文档,这些文档都是在这里解释的? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#querycriteria-associations –

0

使用标准的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();