如何在HQL中选择对象的类?当我执行以下操作时:
select e.class, e.name from Entity e
Hibernate返回一个Integer(例如[12,“name”])而不是类对象。如何返回Java类,或者至少返回类或实体名称?或者,如果这不可能,我如何将12转换为Java类?
出于性能原因,我无法查询完整的对象,即我无法查询
select e from Entity
此致 约亨
答案 0 :(得分:8)
如果你是hibernate4,你可以使用HQL函数'type()'来获取实体类型
select type(e), e.name from Entity e
如果你是hibernate3,session.iterate()只返回带有id的HibernateProxy实体,你可以得到实体名称&在没有初始化的情况下从中获取id。
Iterator iterator = session.createQuery("from Entity e").iterate();
while(iterator.hasNext()) {
HibernateProxy object = (HibernateProxy)iterator.next();
System.out.println(object.getHibernateLazyInitializer().getIdentifier());
System.out.println(object.getHibernateLazyInitializer().getEntityName());
}
答案 1 :(得分:4)
你可以使用addEntity()方法告诉Hibernate使用你的类来映射答案
Query query = session.createSQLQuery(
"select e.class,e.name from Entity e where <your conditions>")
.addEntity(Entity.class)
List<Entity> result = query.list();
答案 2 :(得分:1)
在select子句中显式指定列名的标量HQL将返回object[]
的列表。返回数组中的每个索引与select子句中的相应列匹配。
要返回对象列表,请使用select e from Entity e
或仅from Entity
。
List<Entity> result = (List<Entity>) session.createQuery("from Entity").list();
要限制HQL返回的记录,请在HQL的where子句中应用一些条件,例如:from Entity e where e.name = xxxxx
答案 3 :(得分:0)