2012-10-17 92 views
2

我想这个SQL:内加入标准休眠

SELECT COUNT(*) FROM table1 t1, table2 t2 
WHERE t1.id > 0 
AND ((t1.name = 'foo') 
    OR (t1.id2 = t2.id AND t1.name = 'det')) 

如果我使用别名表2:

detachedCriteria.createAlias("table2", "t2"); 

,并设置这样的:

detachedCriteria.add(Restrictions.eqProperty("t1.id2", "t2.id")); 

休眠总是生成INNER JOIN在我不想要的SELECT查询中,这给了我错误的结果。

select count(*) as y0_ 
from 
    table1 this_ 
inner join 
    table2 table2_ 
     on this_.id2=table2_.id 
where 
... 

如何在WHERE子句(t1.id2 = t2.id)中不存在“SELECT INNER JOIN”?

+0

这似乎是从table1到table2的左外连接,不是吗? – oddparity

回答

0

使用Criteria API,你不能。您只能从根实体进行查询并创建别名或子文件以通过其关联导航到其他实体。使用此API无法一次从两个实体中进行选择。不过,可以使用HQL。