Как наилучшим образом сопоставить результаты SQL-запроса с объектом Java, отличным от -, с помощью Hibernate?

У меня есть объект Java, управляемый Hibernate, с именем X и собственная функция SQL (myfunc ), которую я вызываю из запроса Hibernate SQL в следующих строках:

SQLQuery q = hibernateSession.createSQLQuery(
                     "SELECT *, myfunc(:param) as result from X_table_name"
             );

Что я хочу сделать, так это сопоставить все, что возвращается из этого запроса, с классом (, не обязательно управляемым Hibernate ), называемым Y. Y должен содержать все свойства/поля из X плюс result, возвращаемый myfunc, например. Y может расширить класс X и добавить поле «результат».

Что я пробовал:

  1. Я пытался использовать q.addEntity(Y.class), но с: org.hibernate.MappingException: Unknown entity com.mycompany.Y
  2. q.setResultTransformer(Transformers.aliasToBean(Y.class));это не работает. но это не работает с:org.hibernate.PropertyNotFoundException: Could not find setter for some_property. X имеет поле с именем somePropertyс соответствующим геттером и сеттером, но в этом случае не похоже, что Hibernate сопоставляет имя столбца (какое-то _свойство )с правильным именем поля.
  3. q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);возвращает карту, но значения не всегда имеют тип, ожидаемый соответствующим полем в X.Например, поля в X типа enum и Date не могут быть отображены непосредственно из карты, возвращенной запросом SQL (, где они являются строками ).

Как правильно поступить в этой ситуации?

17
задан Johan 7 August 2012 в 19:40
поделиться