2011-03-18 62 views
0

例如,老虎是貓,但老虎不會有任何貓子:如何覆蓋hibernate中子類中的集合元素類型?

@Entity 
class Cat { 
    @OneToMany(targetEntity=Cat.class) 
    Set<Cat> getChildren() { ... } 
} 

和老虎:

@Entity 
class Tiger extends Cat { 
    @OneToMany(targetEntity=Tiger.class) 
    Set<Cat> getChildren() { ... } 
} 

的問題是,Hibernate不會允許這樣的定義,因爲錯誤:

Repeated column in mapping for entity: com.bee32.plover.orm.Tiger column: parent (should be mapped with insert="false" update="false") 

有什麼想法嗎?

+0

您需要決定它在數據庫中的外觀。 – axtavt 2011-03-18 09:16:54

回答

2

我們通過提供一個XML文件(根元素:...)來實現它,但爲什麼您首先需要它?

通常情況下,您會限制老虎班只接受同一班級的孩子,所以getChildren()會返回一組老虎。

在數據庫中,您將有一個鑑別器來定義數據集的實體類。因此,如果您爲具有鑑別符「CAT」(或類似)的數據集指定爲「TIGER」的子項,那麼無論如何加載該關聯時都會發生異常(因爲該實體的類別爲Cat且無法轉換爲Tiger)。