X と呼ばれる Hibernate マネージド Java エンティティと、これらの行に沿って Hibernate SQL クエリから呼び出すネイティブ SQL 関数 (myfunc) があります。
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
result
私がやりたいことは、このクエリから返されたすべてのものを Y というクラス (必ずしも Hibernate によって管理されているとは限りません) にマップすることですmyfunc
。 「結果」フィールド。
私が試したこと:
- 私は使用してみまし
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);
Map を返しますが、値は常に X の対応するフィールドで期待される型であるとは限りません。たとえば、X の enum 型および Date 型のフィールドは、SQL クエリ (文字列) によって返される Map から直接マップすることはできません。
この状況に対処する適切な方法は何ですか?