Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jpa 级联不工作_Jpa_Cascade_One To Many - Fatal编程技术网

Jpa 级联不工作

Jpa 级联不工作,jpa,cascade,one-to-many,Jpa,Cascade,One To Many,我读过jpa cascade,但仍然有一个问题 ParentBiz.java ... @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent", fetch = FetchType.LAZY, targetEntity = ChildrenBiz.class) private List<Child> children; ... 很简单,对吧?我已经编写了一个插入父级(及其子级,通过级联)的测试,它工作正常。然后我在父对象

我读过jpa cascade,但仍然有一个问题

ParentBiz.java

...
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent", fetch = FetchType.LAZY, targetEntity = ChildrenBiz.class)
private List<Child> children;
...
很简单,对吧?我已经编写了一个插入父级(及其子级,通过级联)的测试,它工作正常。然后我在父对象上添加一个子对象并合并父对象,它也可以正常工作。但是,当我删除一个子项并合并父项时,它不是级联的


据我所知,它应该删除所有子项,并在每次合并父项时再次插入它,但事实并非如此。我真的不知道,因为这似乎很容易…

它无法将合并请求级联到子级,因为它不在父级的子级集合中。因此,提供程序无法看到对不在列表中的子项所做的任何更改。由于子级拥有该关系,因此无法从父级更改该关系,并且该关系将继续存在于数据库中

如果希望从数据库中删除子项,则需要使用孤立项删除。这将导致从集合中删除的所有元素从数据库中删除。但是,不应该再提到孩子,如果这些孩子的实体是独立于父母的,或者是可以交换的,那么这不是一个很好的措施


另一个解决方案是,一旦从父对象中删除子对象,就显式合并它们。如果不可能,您可以将关系更改为单向关系,并从父对象转到子对象。这将允许父级控制外键,因此对集合的更改将导致更改反映在数据库中。

谢谢,Chris。它与孤立删除和CascadeType.ALL一起工作。
...
@ManyToOne(targetEntity = ParentBiz.class, fetch = FetchType.LAZY)
@JoinColumn(name = "ID_PARENT", nullable = false)
@ForeignKey(name = "FKMAW53A")
private Parent parent;
...