2010-09-01 69 views
2

我有一個實體層次結構有單個表的所有子類的策略。我想要使​​用每個屬性映射的@ManyToOne作爲主鍵。當我把@Id註釋,我得到這個錯誤:我可以在Discriminated Entity Hierarchy的子類上使用CompositeId嗎?

java.lang.ClassCastException:org.hibernate.mapping.SingleTableSubclass不能轉換到org.hibernate.mapping.RootClass

那麼怎麼可以提供將所有屬性定義爲區分層次結構上的標識符?

回答

7

對於實體層次結構中的最高級對象,您的ID必須是唯一的。您不能在子類上定義標識並擁有一個超類,即一個沒有標識的實體。

想想這樣,entityManager.find(SuperClass.class, 2);是一個完全合法的電話。如果ID在子類中定義爲FK列,那麼它們中的多個ID可能爲ID 2!什麼會返回?

將ManyToOne關係的FK端用作主鍵在第一位是無意義的。那麼它將被定義爲OneToOne。

相關問題