我有一个名为 X 的 Hibernate 托管 Java 实体和一个从 Hibernate SQL 查询中调用的本机 SQL 函数 (myfunc):
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
我想要做的是将从此查询返回的所有内容映射到一个名为 Y 的类(不一定由 Hibernate 管理)。 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
用适当的 getter 和 setter 调用的字段,但在这种情况下,Hibernate 似乎没有将列名 (some_property) 映射到正确的字段名。q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
返回一个 Map,但值并不总是 X 中相应字段所期望的类型。例如,X 中类型为 enum 和 Date 的字段不能直接从 SQL 查询返回的 Map 映射(它们是字符串)。
处理这种情况的适当方法是什么?