HQL - 2个条件下的外连接

时间:2011-09-14 19:50:33

标签: sql hibernate hql criteria outer-join

我需要写The Query。这是一个简化的问题: 有名为篮子。其中有水果(0或更多)。篮子有所有者(1或更多)。水果也有业主(1或更多)。我想在Joe的篮子里面得到Joe的水果清单,包括没有任何Joe水果的Joe的篮子。我们走了:

select basket.name, fruit.name from Owner owner
join owner.baskets basket
left outer join basket.fruits fruit WITH OWNER in (FRUIT.OWNERS)
where owner.id = joe_id

但是......它在HQL中不起作用。它看起来不错。它在SQL中很简单。

所以,问题是: 如何在HQL或条件API 中加入多个条件 (使用Hibernate 3.3)。

我需要分页,所以我以后无法获取空篮子,因为我无法计算哪些项目应该在哪些页面上。我当前的解决方案是本机查询,但必须有办法......

1 个答案:

答案 0 :(得分:-1)

我认为您可以使用条件API和别名或子标准来解决您的问题。

Hibernate条件为水果创建左外连接的别名,为篮子创建内层连接。

Criteria criteria = getSession().createCriteria(Account.class).setProjection(
            Projections.projectionList()
                    .add(Property.forName("fruit.name"))
                    .add(Property.forName("basket.name"))
    );
    criteria.createAlias("fruits", "fruit",1);
    criteria.createAlias("baskets","basket",0);
    criteria.add(Property.forName("fruit.owner").eqProperty("basket.owner"));
    List<Object> l = criteria.add(Restrictions.eq( "id", some_joe_id_var ).list();