I have a Hibernate managed Java entity called X and a native SQL function (myfunc) that I call from a Hibernate SQL query along these lines:
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
What I want to do is to map the everything returned from this query to a class (not necessarily managed by Hibernate) called Y. Y should contain all properties/fields from X plus the result
returned by myfunc
, e.g. Y could extend class X and add a "result" field.
What I've tried:
- I've tried using
q.addEntity(Y.class)
but this fails with:org.hibernate.MappingException: Unknown entity com.mycompany.Y
q.setResultTransformer(Transformers.aliasToBean(Y.class));
but this fails with:org.hibernate.PropertyNotFoundException: Could not find setter for some_property
. X has a field calledsomeProperty
with the appropriate getter and setter but in this case it doesn't seem like Hibernate maps the column name (some_property) to the correct field name.q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
returns a Map but the values are not always of the type expected by the corresponding field in X. For example fields in X of type enum and Date cannot be mapped directly from the Map returned by the SQL query (where they are Strings).
What's the appropriate way to deal with this situation?