2011-02-11 52 views
2

我使用Hibernate选择一个数字(x)的实体Foo。每个foo都有一对多的集合条和baz,它们被设置为延迟获取。我需要为每个foo填充bar和baz,所以我绝对不希望每个集合都发布一个子查询(2 * x + 1个选择)。使用两个一对多集合来查询一个hibernate实体

但是,我也不一定要setFetchMode(FetchMode.JOIN),因为这将返回笛卡尔积(bar x baz)。另外,如果我将foo和bar定义为列表,我将收到重复的项目。我可以发布两个条件:

List<Foo> foos; 
foo = session.createCriteria(Foo.class).setFetchMode("bar", FetchMode.JOIN).list(); 
foo = session.createCriteria(Foo.class).setFetchMode("baz", FetchMode.JOIN).list(); 

但代码看起来相当sl。。它看起来像第一个查询是不必要的。有没有更好的方法来获取酒吧和巴兹?

回答

1

我想转储标准并使用HQL来做到这一点。

String hql = "select new list(foo.bar, foo.baz) from Foo foo"; 
Query query = session.createQuery(hql); 
List list = query.list; 
Bar bar = list.get(0); 
Baz baz = list.get(1); 

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

+0

什么是富有其他成员(非集合),我想?你会单独选择它们吗? – schmmd 2011-02-11 19:30:02

相关问题