首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当所有者实体失去对它们的引用时,JPA为什么不删除拥有的实体?

当所有者实体失去对它们的引用时,JPA为什么不删除拥有的实体?
EN

Stack Overflow用户
提问于 2009-07-15 18:43:13
回答 4查看 3.1K关注 0票数 1

我有一个JPA实体“请求”,它拥有一个答案列表(也是JPA实体)。下面是如何在Request.java中定义它:

代码语言:javascript
复制
@OneToMany(cascade= CascadeType.ALL, mappedBy="request")
private List<Answer> answerList;

在Answer.java中:

代码语言:javascript
复制
@JoinColumn(name = "request", referencedColumnName="id")
@ManyToOne(optional = false)
private Request request;

在程序执行过程中,可能会添加或删除请求的答案列表,或者替换实际的List对象。因此,我的问题是:当我将请求合并到数据库时,过去在列表中的应答对象保存在数据库中--也就是说,请求不再保留引用的应答对象(通过列表间接地)不会被删除。

这不是我想要的行为,好像我把一个请求合并到数据库,然后再取它,它的答案列表可能不一样。我在编程上犯了什么错误吗?是否有一个注释或设置可以确保数据库中的答案恰好是请求列表中的答案?

一个解决方案是保留对原始答案列表的引用,然后在合并请求之前使用EntityManager删除每个旧的答案,但是似乎应该有一个更干净的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-15 15:52:02

在JPA1.0中,您想要做的事情不能由JPA完成。简单地说,所有关系管理都必须由应用程序完成,包括从集合中移除任何孤儿(这就是您要做的)。

在JPA2.0中,它们确实支持(尽管我不知道细节),但是根据您的实现,升级可能并不容易或不可能。

您也可以直接使用Hibernate之类的东西,但仍然使用许多JPA1.0注释,等等。我也不能提供详细信息。

在我的例子中,我编写了通用代码来通过反射自动处理集合的合并。

票数 1
EN

Stack Overflow用户

发布于 2010-05-06 10:03:00

使用EclipseLink并将@PrivateOwned注释添加到answerList中会有帮助。

票数 1
EN

Stack Overflow用户

发布于 2009-12-15 15:36:43

在映射关系中指定其他属性是非法的。您可以在请求中使用@DependentElement注释。

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

https://stackoverflow.com/questions/1133179

复制
相关文章

相似问题

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