2015-06-02 67 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