我需要写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)。
我需要分页,所以我以后无法获取空篮子,因为我无法计算哪些项目应该在哪些页面上。我当前的解决方案是本机查询,但必须有办法......
答案 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();