2017-10-11 52 views
0

我有3個實體可以有彼此的關係。所以解決這個問題的一個好的步驟就是使用另一個表來存儲3個實體的3個ID。 可以說,實體是X,Y和Z休眠三元關係和附加表

@Entity 
public class XYZ { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @ManyToOne 
    @JoinColumn(name = "X_ID") 
    private X x; 

    @ManyToOne 
    @JoinColumn(name = "Y_ID") 
    private Y y ; 

    @ManyToOne 
    @JoinColumn(name = "Z_ID") 
    private Z z; 

    public XYZ(){ 

    } 


} 

實體X,Y和Z有自己的屬性和自己的主鍵。 我有幾個問題。

1)我應該將@OneToMany添加到屬性private XYZ xyz上的X,Y和Z實體上; ?或者當我們只想在XYZ表格的幫助下找到關係時,它是沒有必要的。

2)在實體XZY中,我爲實體X,Y和Z擁有普通的getter和setter。我給出了整個實體。 Hibernate是否會自動去查找XYZ實體中X,Y和Z的主鍵?

最後一個問題 3)假設我刪除了XYZ實體中使用的對象X,Hibernate是否會自動去除XYZ實體中的記錄?或者我必須添加其他信息。

對不起,這些問題,但休眠對我來說是非常新的。

回答

0
  1. Speciying @OneToMany在另一側(X,Y和Z實體)是 沒有必要的,除非你想使你們的關係 雙向。
  2. 您已經定義了@JoinColumn註釋: X_ID,Y_ID和Z_ID,它們是分別取自X,Y和Z實體的 主鍵的外鍵列。
  3. 如果要執行級聯刪除,以這種方式刪除X時,子實體XYZ也會被刪除,那麼這是您需要雙向建立關係的時間。您需要在X實體上指定@OneToMany映射並添加級聯屬性。

實施例:

@OneToMany(mappedBy="x", cascade=CascadeType.REMOVE) 
Set<XYZ> xyzSet;