Java 查询具有两个一对多集合的hibernate实体

Java 查询具有两个一对多集合的hibernate实体,java,hibernate,Java,Hibernate,我正在使用Hibernate选择若干(x)个实体。每个foo都有一对多的集合bar和baz,它们被设置为延迟抓取。我需要为每个foo填充bar和baz,所以我绝对不希望每个集合都发布子选择(2*x+1选择) 但是,我也不一定要对这两个函数都设置FetchMode(FetchMode.JOIN),因为这将返回笛卡尔积(bar x baz)。此外,如果我将foo和bar定义为列表,我将收到重复的项目。我可以发布两个标准: List<Foo> foos; foo = session.cre

我正在使用Hibernate选择若干(x)个实体。每个foo都有一对多的集合bar和baz,它们被设置为延迟抓取。我需要为每个foo填充bar和baz,所以我绝对不希望每个集合都发布子选择(2*x+1选择)

但是,我也不一定要对这两个函数都设置FetchMode(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();
列出foo;
foo=session.createCriteria(foo.class).setFetchMode(“bar”,FetchMode.JOIN).list();
foo=session.createCriteria(foo.class).setFetchMode(“baz”,FetchMode.JOIN).list();

但代码看起来相当草率。第一个查询似乎没有必要。有没有一种更简洁的方法可以同时获取bar和baz?

我会转储条件并使用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);

什么是foo?我想要其他成员(非集合)?你也可以单独选择它们吗?你可以,你也可以说selectfoo.name,newlist(foo.bar,foo.baz)。。。我认为我的查询实际上返回了一个列表列表。但是你可以玩它。您还可以返回地图。“选择新地图(max(bodyWeight)作为max,min(bodyWeight)作为min,count(*)作为n)。等等。玩得开心。从Cat”任何有匹配构造函数的东西。我现在坚持两个标准查询,但感谢您的出色回答;-)