因此,我習慣於使用帶註釋的Hibernate 4一段時間了。傳統上,我每桌完成1個具體課,完成並完成,這一直對我有效。休眠單表,查詢所有行
現在,我仍然在使用Hibernate 4.3.11,並且第一次使用Single Table Hierarchy。我有一個主/根類,如下所示:
@Entity
@Table(name = "mytable")
@SuppressWarnings("serial")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "myobject_type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "ABC")
public class MyEntity extends BaseEntity
所以,我在想,如果這個類應該是抽象類???它似乎並不需要。
子類的定義如下:
@Entity
@DiscriminatorValue(value = "XYZ")
public class XyzEntity extends MyEntity
我創建了一個DAO的myEntity所,以及這些方法的單元測試,創建/更新/ findById一切似乎工作......但「getAllList」不似乎。
@Override
public List<MyEntity> getAllList()
{
List<MyEntity> myList = this.sessionFactory.getCurrentSession().createQuery("from MyEntity").list();
return myList;
}
當我單元測試此方法時,我收到一條錯誤消息。
org.hibernate.WrongClassException: Object [id=708] was not of the specified subclass [com.myapp.server.model.common.MyEntity] : Discriminator: XYZ
我應該說我有4條記錄在數據庫中。 2個記錄在「myobject_type」字段中的值爲「XYZ」,另一個值爲「ABC」
所以,我想知道是否應該打擾我的根類中有DiscriminatorValue?我讓該字段「myobject_type」不爲空,因此,我會確保每個記錄都有一個來自MyEntity的記錄的鑑別器值「ABC」,如果創建了XyzEntity,則會記錄「XYZ」的值。同樣,一個新的MnoEntity在該領域的價值可能是「MNO」。
只是好奇,在這整個層次結構中,如果我有兩個MyEntity的子類,我可以在這兩個子實體中具有相同的字段嗎?或者,我想我可以將類似這樣的東西移動到根實體的不止一個地方。
同樣,這是我第一次使用Hibernate中的Single Table Hierarchy,我只需要解決這個錯誤消息。非常感激任何的幫助!!!謝謝!
湯姆
你看過嗎? http://stackoverflow.com/questions/25349239/hibernate-single-table-inheritance – javaguest
是的。我在這個問題上進行了大量的搜索,並且我看了幾十頁關於SIngle表層次結構的正確示例。一些例子表明,基類/實體不必是抽象的,而且我當然可以讓這個類抽象化,問題就會消失。但是,如果我正在開發的應用程序需要這個根類,我只想知道我是否可以解決這個問題? – tjholmes66
在我發佈的問題中,用戶創建了另一個帶有insertable = false,updateable = false的抽象類,所以你仍然可以使用你的根類 – javaguest