Hibernate:如何从多个类的查询中获取结果
如果我的查询包含一个类,例如:
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
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
- java.math.BigInteger无法强制转换为java.lang.Integer
- 为什么在Hibernate中使用org.hibernate.TransactionException并避免
- 在Spring Framework 3.0中使用Hibernate和Jdbc
- 如何在Hibernate中映射BigDecimal,以便恢复我放入的相同比例?
- JPA2.0支持自定义用户类型和二级缓存
- 如何使用hibernate条件查询将两个属性连接到一个属性中
- Hibernate中的错误简单示例初学者级别
- 重写持久化实体的hashCode()和equals()方法的正确方法是什么?
- 引起:java.lang.IllegalStateException:找到不明确的映射。 无法映射’appController’bean方法