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

时间:2011-10-27 07:53:17

标签: java hibernate hql

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

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

4 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:6)

你可以使用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对象。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:0)

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

假设类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