Как вы помещаете raw-sql проекции в объект, используя Hibernate? - PullRequest
2 голосов
/ 06 июля 2010

Допустим, у меня есть запрос, который начинается со следующих прогнозов:

SELECT t.term as term, count(g.id) as amount

Это необработанный sql, и я использую createSqlQuery для объекта сеанса Hibernate. То, что я хотел бы сделать, это взять эти проекции и поместить их в объект, который имеет свойства «term» и «amount».

В HQL мы можем использовать «выбрать новое имя класса (...)», но это не работает с необработанным SQL-запросом.

Как нам это сделать? Я возвращаю кучу [LObject's ... и я не знаю, что с ними делать. Если бы я мог заставить Hibernate поместить их в какой-то объект, не относящийся к сущности, это было бы здорово.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Если бы я мог заставить Hibernate поместить их в какой-то объект, не являющийся объектом значения, это было бы здорово.

Вы можете указать Hibernate возвращать объекты неуправляемых значений из собственного запроса SQL, применив «преобразователь результатов» . Из справочной документации:

16.1.5. Возврат неуправляемых объектов

Можно применить ResultTransformer на родной SQL запросы, позволяющие вернуть неуправляемые объекты.

sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
        .setResultTransformer(Transformers.aliasToBean(CatDTO.class))

Указан этот запрос:

  • строка запроса SQL
  • преобразователь результата

Приведенный выше запрос вернет список CatDTO который был создан и вводят значения NAME и BIRTHNAME в соответствующий свойства или поля.

0 голосов
/ 06 июля 2010

Проверка http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS").addEntity(Cat.class)

Предполагая, что ваш объект со свойствами term и amount имеет только эти 2 атрибута объекта, аналогичный запрос с вашим raw SQL должен вернуть списокобъекты, которые вы затем можете перебирать один за другим.

...