合并和延迟加载

时间:2016-07-17 11:10:17

标签: java hibernate jpa merge orm

您好,我希望您能帮我解决这个问题:

Student
...
@ManyToOne
Mentor


Mentor
...
@OneToMany
Student

在以下情况下对学生使用合并有什么不同:

导师是懒惰的: @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.MERGE))

导师渴望: @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.MERGE))

1 个答案:

答案 0 :(得分:1)

如果您没有级联,首先合并时不会发生任何事情。在您的示例中,您尚未指定Cascade.Merge,因此您的合并操作不会级联。

让我们假设你有级联。如果您的实体未初始化,如果您的关系是Lazy可能会发生,则级联将不会在非初始化集合上传播。

在您遵循JPA规范的特定情况下,ManyToOne的默认行为是EAGER。

如果是EAGER,将检查实体是否脏,如果它是脏的,合并将进一步级联

还有一件事。 ManyToOne上的CascadeType.ALL是一个坏主意。因为如果在MANY端删除一个实体,这将触发删除父对象。我相信你真的不想要这个。我强烈建议您删除CascadeType.All