用于3个表之间连接的Hibernate查询条件

时间:2012-07-04 19:50:46

标签: java hibernate hibernate-criteria

我有一个SQL查询:

select * from A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
INNER JOIN D
ON C.id = D.id
where D.name = 'XYZ'
   and D.Sex = 'M'

我一直试图为上面的sql提供hibernate查询条件,但是遇到了问题。任何人都可以提供帮助。

2 个答案:

答案 0 :(得分:5)

Criteria c = session.createCriteria(A.class, "a");
                    .createAlias("a.b", "b")
                    .createAlias("b.c", "c")
                    .createAlias("c.d", "d")
                    .add(Restrictions.eq("d.sex", "M"))
                    .add(Restrictions.eq("d.name", "XYZ"));

答案 1 :(得分:1)

关于你想要执行笛卡尔加入的问题,Criteria不支持这一点,尽管你可以使用HQL来实现,如下所示。还有一个类似的问题here

使用HQL查询,您可以执行以下操作:

select a from 
   A a, 
   B b, 
   C c 
where 
   a.id = b.id and 
   c.id = b.id and 
   d.id = c.id and 
   d.name = 'XYZ' and 
   d.sex = 'M'

查询用于常规的hibernate查询:

Query query = session.createQuery(query); // <-- here you use the query above
List results = query.list();