Как выбрать класс объекта в HIbernate HQL? - PullRequest
6 голосов
/ 09 марта 2012

как выбрать класс объекта в HQL? Когда я делаю следующее:

select e.class, e.name from Entity e

Hibernate возвращает целое число (например, [12, «имя»]) вместо объекта класса. Как я могу вернуть класс Java или хотя бы имя класса или сущности? Или, если это невозможно, как я могу преобразовать 12 в класс Java?

По соображениям производительности я не могу запросить полные объекты, то есть я не могу сделать

select e from Entity

С уважением, Jochen

Ответы [ 4 ]

8 голосов
/ 04 мая 2012

если вы hibernate4, вы можете использовать HQL функцию 'type ()', чтобы получить тип сущности

select type(e), e.name from Entity e

Если вы hibernate3, session.iterate () возвращает сущность как HibernateProxy только с идентификатором,и вы можете получить имя и идентификатор сущности без инициализации.

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());
}
4 голосов
/ 08 августа 2012

вы можете просто использовать метод 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();
1 голос
/ 09 марта 2012

Скалярный HQL, который явно задает имя столбца в предложении select, возвращает список object[]. Каждый индекс в возвращенном массиве соответствует соответствующему столбцу в предложении select.

Для возврата спискаобъект, используйте select e from Entity e или просто from Entity.

List<Entity> result =   (List<Entity>) session.createQuery("from Entity").list();

Чтобы ограничить запись, возвращаемую HQL, примените некоторые условия в предложении where HQL, например: from Entity e where e.name = xxxxx

0 голосов
/ 10 марта 2012

Если вы хотите ограничить число столбцов в списке выбора , вы можете использовать оператор new внутри hql.

То есть

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

Также добавьте соответствующий конструктор в класс Entity, который может использовать этот запрос.

Это даст вам List<Entity>, инициализированный только с двумя значениями.Это полезно, когда вам нужен моментальный снимок большого объекта.Прочитайте здесь для API документации или здесь для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...