我有一个 JPA 实体“请求”,它拥有一个答案列表(也是 JPA 实体)。这是它在 Request.java 中的定义方式:
@OneToMany(cascade= CascadeType.ALL, mappedBy="request")
private List<Answer> answerList;
在 Answer.java 中:
@JoinColumn(name = "request", referencedColumnName="id")
@ManyToOne(optional = false)
private Request request;
在程序执行过程中,请求的答案列表可能会添加或删除答案,或者可能会替换实际的列表对象。因此,我的问题是:当我将 Request 合并到数据库时,曾经在 List 中的 Answer 对象保留在数据库中——也就是说,Request 不再持有引用的 Answer 对象(间接地,通过列表)不会被删除。
这不是我想要的行为,好像我将一个请求合并到数据库,然后再次获取它,它的答案列表可能不一样。我犯了一些编程错误吗?是否有注释或设置可以确保数据库中的答案与请求列表中的答案完全相同?
一种解决方案是保留对原始答案列表的引用,然后在合并请求之前使用 EntityManager 删除每个旧答案,但似乎应该有一种更清洁的方法。