Tengo un Hibernate logró Java entidad llamada X y una función de SQL nativo (myfunc) que llamo desde una consulta SQL de Hibernate lo largo de estas líneas:¿Cómo se pueden mapear los resultados de una consulta SQL a un objeto Java que no sea de entidad utilizando Hibernate?
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
Lo que quiero hacer es asignar el todo de regresar de esta consulta a una clase (no necesariamente gestionada por Hibernate) llamada Y. Y debe contener todas las propiedades/campos de X más el result
devuelto por myfunc
, por ejemplo Y podría extender la clase X y agregar un campo de "resultado".
Lo que he intentado:
- He intentado usar
q.addEntity(Y.class)
pero esto no funciona con:org.hibernate.MappingException: Unknown entity com.mycompany.Y
q.setResultTransformer(Transformers.aliasToBean(Y.class));
pero esto no funciona con:org.hibernate.PropertyNotFoundException: Could not find setter for some_property
. X tiene un campo llamadosomeProperty
con el getter y el setter apropiados, pero en este caso no parece que Hibernate asigne el nombre de la columna (some_property) al nombre de campo correcto.q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
devuelve un Mapa, pero los valores no son siempre del tipo esperado por el campo correspondiente en X. Por ejemplo, los campos en X de tipo enum y Fecha no se pueden asignar directamente desde el Mapa devuelto por la consulta SQL (donde están Instrumentos de cuerda).
¿Cuál es la forma adecuada de manejar esta situación?
Eek, un elenco de 'Long'. ¿Cómo sabes de antemano que 'row [0]' va a ser un 'Long'? ¿Hay alguna forma de hacer cumplir la conversión de tipo de datos a través de las API de Hibernate? –
@LukasEder: siga el enlace a la documentación, se explica allí. Pero el uso de consultas SQL con Hibernate debe ser extremadamente excepcional. La mayoría de las veces, utiliza consultas de HQL/criterios, y el tipo se deduce del tipo de campo en su entidad. –
Gracias por la información. Debería haber leído completamente tu respuesta ...No obstante, todavía es un poco molesto que la información tipo se repita –