如何在HIbernate HQL中选择对象的类?

时间:2012-03-09 08:45:46

标签: hibernate hql

如何在HQL中选择对象的类?当我执行以下操作时:

select e.class, e.name from Entity e

Hibernate返回一个Integer(例如[12,“name”])而不是类对象。如何返回Java类,或者至少返回类或实体名称?或者,如果这不可能,我如何将12转换为Java类?

出于性能原因,我无法查询完整的对象,即我无法查询

select e from Entity

此致 约亨

4 个答案:

答案 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)

如果您想限制选择列表中的列数,可以使用new中的hql运算符。

即,

select new Entity(e.class, e.name) from Entity e

此外,在此查询可以使用的Entity类中添加相应的构造函数。

这将为您提供List<Entity>,仅使用2个值初始化。

当您需要以高效方式获取Large对象的快照时,这非常有用。有关示例,请阅读API文档herehere