我使用Hibernate 3.2.2 GA與HSQLDB 2.0 GA,和我有類似下面這樣的類層次結構:休眠:org.hibernate.WrongClassException,SINGLE_TABLE繼承和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 {
(...)
}
我試圖執行下面的HQL查詢,它返回來自B和C類的對象。
String hql = "from A a where a.someAttr = 3";
Query query = session.createQuery(hql);
return query.list();
不過,我得到以下錯誤:
org.hibernate.WrongClassException: Object with id: 2 was not of the specified subclass: A (Discriminator: C )
最奇怪的是,ID爲2 對象是一個C實例...
我GOOGLE了這個錯誤,我發現一些人面對它,但沒有使用InheritanceType.SINGLE_TABLE
和DiscrimatorFormula
。有沒有人遇到這個問題?
我已經通過了這個。如果可以,請將調試器附加到Hibernate'Loader'或'SingleTableEntityPersister'類。後者將實際的子類存儲在字段'subclassesByDiscriminatorValue'中。檢查鑰匙,並比較那裏實際傳遞的內容。你的輸入看起來可疑地用空白填充。 – mabi 2013-03-27 14:56:23