2015-06-02 101 views
0

我有一個父母,一個孩子和一個孫子對象。 問題是,當我刪除應用程序中的孫子和保存 父對象時,孫子們的更改不會被更新。孫子對象不更新

在父類

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent") 
    @ForeignKey(name = "FK_1") 
    @Cascade({CascadeType.ALL}) 
    private Set<Child> children; 

在子類中

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "parent") 
    @XmlTransient 
    private parent parent; 

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "child") 
    @ForeignKey(name = "FK_2") 
    @Cascade({CascadeType.ALL}) 
    private Set<GrandChild> grandchildren; 

在如GrandChild類

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "child", nullable = false) 
    @XmlTransient 
    private Child child; 

我用冬眠4.2.2.Final。

有什麼想法嗎?

+0

你是什麼意思,當我刪除應用程序中的孫子們?發佈此服務的代碼。 –

+0

我在應用程序中顯示孫子的列表。用戶可以從列表中選擇並刪除它們。有一個SAVE按鈕,通過點擊,更新的父對象將被保存。在調試模式下,我檢查了父對象,列表中沒有項目,但它們仍保留在數據庫中。 – Mahsa

+0

你是否在每個被刪除的孫子中將'child'設置爲'null'? –

回答

1

嘗試將orphanRemoval添加到您的集合中。

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", orphanRemoval=true) 
@OneToMany(fetch = FetchType.EAGER, mappedBy = "child", orphanRemoval=true) 
+0

謝謝。並且我使用了merge而不是saveOrUpdate。現在它可以工作。 – Mahsa

+0

@Masha你能把它標記爲正確嗎?您的代碼是否只使用合併而不使用orphanRemoval? – sgpalit