首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >级联不起作用

级联不起作用
EN

Stack Overflow用户
提问于 2013-06-13 21:07:34
回答 1查看 154关注 0票数 0

我读过关于jpa cascade的文章,但仍然有一个问题。

ParentBiz.java

代码语言:javascript
运行
复制
...
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent", fetch = FetchType.LAZY, targetEntity = ChildrenBiz.class)
private List<Child> children;
...

Child.java

代码语言:javascript
运行
复制
...
@ManyToOne(targetEntity = ParentBiz.class, fetch = FetchType.LAZY)
@JoinColumn(name = "ID_PARENT", nullable = false)
@ForeignKey(name = "FKMAW53A")
private Parent parent;
...

很简单,对吧?我已经编写了一个测试来插入父级(以及它的子级,通过级联),它工作得很好。然后我在parent上添加一个子代并合并父代,它也工作得很好。但是当我删除子对象并合并父对象时,它不是级联的。

据我所知,每次我合并父级时,它应该删除所有子级并再次插入它,但这并不是正在发生的事情。我真的一无所知,因为这看起来很简单...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 21:20:55

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

如果要从数据库中删除子项,则需要使用孤立删除。这将导致从集合中删除的任何元素都将从数据库中删除。但是不应该有其他对子实体的引用,如果这些子实体意味着独立于它们的父母或可以交换,这不是一个很好的措施。

另一种解决方案是,一旦子代从父代中删除,就显式地合并子元素。如果这是不可能的,您可以将关系更改为单向关系,并从父级转到子级。这将允许父级控制外键,以便对集合所做的更改会在数据库中反映出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17087862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档