I'm using Hibernate 3.2.2 GA with HSQLDB 2.0 GA, and I have a class hierarchy similar to the following:
@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 {
(...)
}
I'm trying to execute the following HQL query, which returns objects from both B and C classes.
String hql = "from A a where a.someAttr = 3";
Query query = session.createQuery(hql);
return query.list();
However, I get the following error:
org.hibernate.WrongClassException: Object with id: 2 was not of the specified subclass: A (Discriminator: C )
The strangest thing is that the object with id 2 is a C instance...
I've googled for this error and I've found some people who's faced it, none using InheritanceType.SINGLE_TABLE
and DiscrimatorFormula
, though. Has anyone run into this problem?
Make sure the entity is listed in your config file (persistence.xml, for example). From https://stackoverflow.com/a/14150629/116596