Hibernate:如何从多个类的查询中获取结果

如果我的查询包含一个类,例如:

query = session.createQuery("select u from User as u"); queryResult = query.list(); 

然后我迭代它,其中queryResultUser类的对象。

那么如何从包含多个类的查询中获取结果呢? 例如:

 select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1 

 for (Object[] result : query.list()) { User user = (User) result[0]; Group group = (Group) result[1]; } 

你可以使用Tuples来做到这一点我相信,但更重要的是,如果您的组和用户是相关的,那么查询似乎建议User应该有一个Group字段(不要在你的User类中使用groupId,hibernate应该为你排序)。 如果是这种情况,你可以简单地使用select u from User u join fetch u.group g where g.groupId = :id (然后使用query.setParameter(1, id);设置id)来查询它。

该查询中的fetch关键字使其成为一个急切的加载,因此两个对象都将返回到hibernate,这将返回User对象。 使用user.getGroup()访问Group对象。

当您选择单个实体时, query.list()将返回包含您的实体的Object List

当您选择多个实体时, query.list()将返回一个List of Object[] 。 数组的每个元素都重新表示一个单独的实体。

在这里阅读更多内容: http : //docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

您还可以创建构造函数并返回一个对象:

假设类Family具有适当的构造函数 – 作为实际的类型安全Java对象:

 select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr 

或者列表:

 select new list(mother, offspr, mate.name) from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr 

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