У меня есть управляемый 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 сопоставляет имя столбца (some_property) правильному имени поля. -
q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
возвращает карту, но значения не всегда относятся к типу, ожидаемому соответствующим полем в X. Например, поля в X типа enum и Date не могут быть сопоставлены непосредственно из Map, возвращаемого SQL-запросом (где это строки).
Каким образом можно справиться с этой ситуацией?