JPA orphanRemoval在级联MERGE时无法正常工作

时间:2017-12-26 12:54:35

标签: java hibernate jpa

我有三个课程的场景。类UserUserDetail通过@OneToOne关系关联,而UserDetailDocument通过@OneToMany关系关联。我在其中使用了CascadeType.ALLorphanRemoval=true,如下所述。

正如类所指定的那样,用户不必具有UserDetail,但每个UserDetail必须具有User(因此optional标志)。每个文档都必须与UserDetail相关联。这不是一个可选的关系!

public class User {
    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, optional = true, orphanRemoval = true)
    private UserDetail details;
}

public class UserDetail {
    @OneToOne(optional = false)
    private User user;

    @OneToMany(mappedBy = "detail", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Document> documents;
}

public class Document {
    @ManyToOne
    private UserDetail detail;
}

保存所有数据时,一切正常,但当我尝试将UserDetail设置为null时,如果填充了文档列表,我会在Documents上获得完整性约束违例异常。 UserDetail的外键不能设置为null。

据我所知,当在User对象上设置details为null并尝试合并它时,提供程序会尝试删除孤立的UserDetail,但不会正确地级联删除命令。如果我尝试删除用户,则级联操作可以正常工作,不会抛出任何异常。

问题:

不应该合并操作会触发删除所有内容,因为我是级联并使用orphanRemoval

Obs。:使用(Hibernate 4.3.7)作为提供者

0 个答案:

没有答案