我已多次阅读级联类型定义,但我无法理解我正在尝试实施的特定情况下使用哪一种。
我在@OneToMany
班级和Worker
班级之间有Task
个关系,因此worker
可以有多个任务,但每个Task
只有一个Worker
1}}
private List <Task> tasks
保存Worker
课程中的任务
private Worker worker;
是Worker
类
Task
对象
我被困在?
下面,不知道我应该使用哪种级联类型。
@OneToMany(targetEntity=Task.class, mappedBy="worker", cascade=CascadeType.?, fetch = FetchType.LAZY)
两个对象应该彼此存在,但我希望对Task
对象的更改反映在Worker
对象上,反之亦然
最终(如果我能让这个工作:) :)我想写一个算法来匹配最好的工作人员,当一个新的任务进入系统我想知道我是否在正确的轨道上。感谢
答案 0 :(得分:2)
这取决于您使用实体的方式。
答案 1 :(得分:2)
在您的特定情况下,您希望将一个实体中的更改还原到另一方,并且如果删除了映射实体,则您不想删除它,以满足您的要求:
两个对象应该彼此存在
在这种情况下,您不应使用CascadeType.REMOVE
类型,因为当拥有实体被删除时,会删除与此设置相关的所有相关实体。
但我希望
上Task
对象的更改能够反映在Worker
在这种情况下,使用CascadeType.PERSIST
和CascadeType.MERGE
类型就足以反映双方之间的变化,因为CascadeType.PERSIST
涵盖了save()
和persist()
两种操作CascadeType.MERGE
将处理merge()
操作。
有关此主题的更多详细信息,我建议您阅读HowToDoInJava Hibernate JPA Cascade Types article,因为它会简要说明所有这些情况。