estoy usando Hibernate 3.2.2 GA con HSQLDB 2,0 GA, y tengo una jerarquía de clase similar a la siguiente:Hibernate: org.hibernate.WrongClassException, la herencia SINGLE_TABLE y DiscriminatorFormula
@Entity
@Table(name = "A_TABLE")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula(value = "case when CODE IN (1, 2, 3, 4) then 'TypeB'
when CODE IN (5, 6, 7, 8) then 'TypeC' else NULL end")
@org.hibernate.annotations.Entity(dynamicUpdate = true, dynamicInsert = true)
public abstract class A{
(...)
}
@Entity
@DiscriminatorValue("TypeB")
public class B extends A {
(...)
}
@Entity
@DiscriminatorValue("TypeC")
public class C extends A {
(...)
}
estoy tratando de ejecutar la siguiente consulta HQL, que devuelve objetos de las clases B y C.
String hql = "from A a where a.someAttr = 3";
Query query = session.createQuery(hql);
return query.list();
Sin embargo, me sale el siguiente error:
org.hibernate.WrongClassException: Object with id: 2 was not of the specified subclass: A (Discriminator: C )
Lo más extraño es que el objeto con id 2 es una instancia de C ...
Googled para este error y he encontrado algunas personas que lo enfrentaron, ninguno usando InheritanceType.SINGLE_TABLE
y DiscrimatorFormula
, sin embargo. ¿Alguien ha tenido este problema?
He pasado por esto. Si puede, adjunte un depurador a la clase 'Loader' de Hibernate o' SingleTableEntityPersister'. Este último está almacenando las subclases reales en el campo 'subclassesByDiscriminatorValue'. Comprueba las claves y compara lo que en realidad se pasó allí. Tu entrada se ve sospechosamente rellena con espacios en blanco. – mabi