您好,我希望您能帮我解决这个问题:
Student
...
@ManyToOne
Mentor
Mentor
...
@OneToMany
Student
在以下情况下对学生使用合并有什么不同:
导师是懒惰的: @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.MERGE))
导师渴望: @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.MERGE))
答案 0 :(得分:1)
如果您没有级联,首先合并时不会发生任何事情。在您的示例中,您尚未指定Cascade.Merge,因此您的合并操作不会级联。
让我们假设你有级联。如果您的实体未初始化,如果您的关系是Lazy可能会发生,则级联将不会在非初始化集合上传播。
在您遵循JPA规范的特定情况下,ManyToOne的默认行为是EAGER。
如果是EAGER,将检查实体是否脏,如果它是脏的,合并将进一步级联
还有一件事。 ManyToOne上的CascadeType.ALL是一个坏主意。因为如果在MANY端删除一个实体,这将触发删除父对象。我相信你真的不想要这个。我强烈建议您删除CascadeType.All