2012-12-18 60 views
3

我滿足以下ORM問題:JPA兒童類引用通過多個​​不同的父類

我有兩個類A和B誰兩者都具有一組C類:

class A { 
    @Id 
    @GeneratedValue 
    private long id; 

    @OneToMany 
    private Set<C> cSet; 
} 

class B { 
    @Id 
    @GeneratedValue 
    private long id; 

    @OneToMany 
    private Set<C> cSet; 
} 

class C { 
    @Id 
    @GeneratedValue 
    private long id; 
} 

一個想法我曾經爲C使用MappedSuperclass,並且有兩個擴展類,每個都在A或B中引用。但是從面向對象的角度來看,這並不是最好的方法,儘管我可以使用超類類型來處理它們。

有沒有更好的方法來實現這個模型?

感謝, 本傑明

+0

最新問題? JPA並不禁止你以這種方式分享課程。 – Perception

+0

好的,但我的問題如下: JPA提供程序(如Hibernate)如何將其映射到關係數據庫中?無論如何,它會爲外部ID添加一個附加列,但它是否會添加「parent-table-name」之類的內容或映射是如何完成的? –

回答

7

如果不指定任何映射註釋(即JoinColumn或JoinTable),它會使用每個關聯連接表。

因此,您將有以下表格:

A : id 
B : id 
C : id 
A_C : a_id, c_id (where c_id is unique) 
B_C : a_id, c_id (where c_id is unique) 

的選擇,如果標註每一個設置有一個JoinColumn註解:

class A { 
    @OneToMany 
    @JoinColumn(name = "a_id") 
    private Set<C> cSet; 
} 

class B { 
    @OneToMany 
    @JoinColumn(name = "b_id") 
    private Set<C> cSet; 
} 

就這樣,你將有以下表格:

A : id 
B : id 
C : id, a_id, b_id 

這當然描述在the documentation

+0

謝謝!這是我想知道的! –