У меня есть объект 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 и добавить поле «результат».
Что я пробовал:
q.addEntity(Y.class)
, но с:
org.hibernate.MappingException: Unknown entity com.mycompany.Y
q.setResultTransformer(Transformers.aliasToBean(Y.class));
это не работает. но это не работает с:org.hibernate.PropertyNotFoundException: Could not find setter for some_property
. X имеет поле с именем someProperty
с соответствующим геттером и сеттером, но в этом случае не похоже, что Hibernate сопоставляет имя столбца (какое-то _свойство )с правильным именем поля.q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
возвращает карту, но значения не всегда имеют тип, ожидаемый соответствующим полем в X.Например, поля в X типа enum и Date не могут быть отображены непосредственно из карты, возвращенной запросом SQL (, где они являются строками ).Как правильно поступить в этой ситуации?