如果我的查询包含一个类,例如:
query = session.createQuery("select u from User as u");
queryResult = query.list();
然后我迭代它,其中queryResult
是User
类的对象。
那么如何从包含多个类的查询中获取结果?例如:
select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1
答案 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