Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA CascadeType.ALL不删除子记录_Java_Jpa - Fatal编程技术网

Java JPA CascadeType.ALL不删除子记录

Java JPA CascadeType.ALL不删除子记录,java,jpa,Java,Jpa,考虑这个用例 class Category { @OneToMany(cascade=CascadeType.ALL) List<Application> applications = new ArrayList<Application>(); } class Application { @ManyToOne Category category; } 类别{ @OneToMany(级联=级联类型.ALL) 列表应用程序=新建Arr

考虑这个用例

class Category {
   @OneToMany(cascade=CascadeType.ALL)
   List<Application> applications = new ArrayList<Application>();
}

class Application {
   @ManyToOne
   Category category;       
}
类别{
@OneToMany(级联=级联类型.ALL)
列表应用程序=新建ArrayList();
}
班级申请{
@许多酮
类别;
}

我理解,在这种情况下,当类别将被删除时,应用程序也将被删除。但是谁来管理联接表呢?为关系生成的Category\u应用程序表。

无论
级联如何,都应始终删除联接表行

对于双向
manyTo owning(非
mappedBy
)侧将删除行

由于您有一个
manytone
,因此您似乎应该使用
mappedBy
,而不是联接表


问题是它们没有被删除,还是在删除之前您遇到了约束错误?调用
remove()
时,还要确保集合不是空的。在调用
remove
之前,请尝试删除集合中的所有内容。无论
cascade
如何,都应始终删除联接表行

对于双向
manyTo owning(非
mappedBy
)侧将删除行

由于您有一个
manytone
,因此您似乎应该使用
mappedBy
,而不是联接表


问题是它们没有被删除,还是在删除之前您遇到了约束错误?调用
remove()
时,还要确保集合不是空的。在调用
remove

之前,请尝试删除集合中的所有内容。听起来这与以下问题相同:

基本上,当您有一个
@OneToMany
时,JPA默认假定子对象具有独立的生命周期,并且可能与多个父对象关联。删除父项并不一定会删除子项。在JPA 2.0(或Eclipselink
@PrivateOwned
或Hibernate
CascadeType.DELETE_ORPHAN
)中指定
OrphanRemoving=true
)告诉JPA在删除父记录时删除子记录


如果您总是希望将子记录生命周期绑定到它的父级,那么您可能还需要考虑@ EntEngices集合,而不是@ OneToMany,它将给出类似的行为,但不允许您独立于父对象来保存子对象。(也就是说,@ElementCollection的子对象不是@Entities。)

听起来这和以下问题是一样的:

基本上,当您有一个
@OneToMany
时,JPA默认假定子对象具有独立的生命周期,并且可能与多个父对象关联。删除父项并不一定会删除子项。在JPA 2.0(或Eclipselink
@PrivateOwned
或Hibernate
CascadeType.DELETE_ORPHAN
)中指定
OrphanRemoving=true
)告诉JPA在删除父记录时删除子记录


如果您总是希望将子记录生命周期绑定到它的父级,那么您可能还需要考虑@ EntEngices集合,而不是@ OneToMany,它将给出类似的行为,但不允许您独立于父对象来保存子对象。(即@ElementCollection的子对象不是@Entities。)

i James,谢谢您的回复。不,我没有收到任何错误,但联接表的行没有被删除。这是我唯一的问题。当我删除实体时,我不确定该实体的集合中是否充满了联接值。但是,即使我没有填写集合,表引用在默认情况下也应该删除它,不是吗?由于我提到的级联类型,如果集合为空,则不需要删除,因为没有要删除的行。您是如何获得要移除的对象的?您使用的JPA提供商和版本是什么?我是詹姆斯,谢谢您的回复。不,我没有收到任何错误,但联接表的行没有被删除。这是我唯一的问题。当我删除实体时,我不确定该实体的集合中是否充满了联接值。但是,即使我没有填写集合,表引用在默认情况下也应该删除它,不是吗?由于我提到的级联类型,如果集合为空,则不需要删除,因为没有要删除的行。您是如何获得要移除的对象的?您使用的JPA提供商和版本是什么?