tengo una clase de entidad y una subclase basado en esa entidad:APP nativa de consulta para la Entidad con la herencia
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class A
y
@Entity
public class B extends A
I necesidad de emitir una consulta nativa que utiliza un procedimiento almacenado en la clase base (A) solamente. Si lo intento de la siguiente manera:
entityManager.createNativeQuery("select * from A a where procedure(f)",A.class).getResultList()
consigo un error con respecto a "El clazz_ columna no se encontró en el conjunto de resultados". Supongo que el proveedor de JPA agrega esta columna para discriminar entre la clase base y la clase extendida. Puedo solucionar este problema mediante la adición de forma explícita la columna de la clazz y todos los campos de la subclase:
entityManager.createNativeQuery("select *,1 as clazz_,null as prop1,null as prop2 from A a where procedure(f)",A.class).getResultList()
donde "prop1" y "prop 2" son propiedades de la subclase B. Sin embargo, esto parece una innecesaria piratear y es propenso a problemas de mantenimiento si la subclase B cambia.
Mi pregunta es: ¿cómo puedo consultar utilizando un procedimiento almacenado en una entidad que tiene herencia definida en él?
Por lo tanto, yo había pensado en esto, pero el problema es que cuando Hibernate intenta inflar el objeto de los Resultados et row, encuentra dos columnas de id, una de las cuales es nula. Supongo que puedo agregar una cláusula where adicional donde los filtros 'b.id sea nulo'. – AnthonyF
La pregunta es: cuando lo escribimos de esta manera, ¿siempre obtendríamos instancias de clase B? –