Java Hibernate JPA级联类型
我已经多次阅读了级联类型的定义,但我只是不知道在我试图实现的特定情况下使用哪一个 我在Java Hibernate JPA级联类型,java,hibernate,jpa,Java,Hibernate,Jpa,我已经多次阅读了级联类型的定义,但我只是不知道在我试图实现的特定情况下使用哪一个 我在工作者类和任务类之间有@OneToMany关系,因此工作者可以有多个任务,但每个任务只针对一个工作者 private List tasks保存Worker类中的任务,并 私人工人是任务类中的工作者对象 我被下面的?卡住了,不知道应该使用哪种级联类型 @OneToMany(targetEntity=Task.class,mappedBy=“worker”,cascade=CascadeType.?,fetch=F
工作者
类和任务
类之间有@OneToMany
关系,因此工作者
可以有多个任务,但每个任务
只针对一个工作者
private List tasks
保存Worker
类中的任务,并
私人工人
是任务
类中的工作者
对象
我被下面的?
卡住了,不知道应该使用哪种级联类型
@OneToMany(targetEntity=Task.class,mappedBy=“worker”,cascade=CascadeType.?,fetch=FetchType.LAZY)
这两个对象应该彼此独立存在,但我希望对
任务
对象的更改反映在工作者
对象上,反之亦然
最终(如果我能让它工作:),我想写一个算法,当一个新任务进入系统时,匹配最好的工人,我想知道我是否在正确的轨道上。谢谢这取决于您使用实体的方式
- 如果从未分离实体,则不需要
。如果您这样做了,那么您可能应该包括这个CascadeType.detach
CascadeType
- 当您将分离的worker重新合并到持久性上下文中时,是否还希望合并其任务?这不是一个容易的决定,但根据您所说的,您可能不会在同一流程中修改工作人员和任务,因此您可能不希望这样做
通常是一个不错的选择,您不会真的错了。但如上所述:听起来您并不是在同一个过程中创建工人和新任务。但如果您这样做,则选择此CascadeType.PERSIST
CascadeType
- 您肯定不想使用
CascadeType。请从我理解的内容中删除
这两个对象应该彼此独立存在 在这种情况下,您不应使用
CascadeType.REMOVE
type,因为删除所属实体时,它会删除与此设置关联的所有相关实体
但是我希望对任务
对象的更改反映在工作者
在这种情况下,使用CascadeType.PERSIST
和CascadeType.MERGE
类型将足以反映双方之间的更改,因为CascadeType.PERSIST
包含save()
和PERSIST()
操作,而CascadeType.MERGE
将处理MERGE()
操作
有关此主题的更多详细信息,我建议阅读,因为它简要地说明了所有这些情况。“两个对象应该彼此独立存在,但我希望任务对象的更改反映在工作者对象上,反之亦然。”我建议您
cascade=CascadeType.all
和adddeleteOrphan=true
。但是如果您使用JPA 2/2.1+Hibernate 5,请小心,级联删除没有得到很好的管理,我建议您手动执行级联删除。@Zorglube它是孤立删除
而不是删除孤立
,如果他使用它,它将删除与另一方无关的元素,这不是他想要的。谢谢@chsdk纠正我的错误。谢谢你,这对我来说很有意义。注意,上面的链接文章将关系所有者
和父母
的概念混为一谈,我看不出这有多混乱,它仅使用所有者
和关系
术语来说明这一点。