我有一个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;在程序执行过程中,可能会添加或删除请求的答案列表,或者替换实际的List对象。因此,我的问题是:当我将请求合并到数据库时,过去在列表中的应答对象保存在数据库中--也就是说,请求不再保留引用的应答对象(通过列表间接地)不会被删除。
这不是我想要的行为,好像我把一个请求合并到数据库,然后再取它,它的答案列表可能不一样。我在编程上犯了什么错误吗?是否有一个注释或设置可以确保数据库中的答案恰好是请求列表中的答案?
一个解决方案是保留对原始答案列表的引用,然后在合并请求之前使用EntityManager删除每个旧的答案,但是似乎应该有一个更干净的方法。
发布于 2009-12-15 15:36:43
在映射关系中指定其他属性是非法的。您可以在请求中使用@DependentElement注释。
https://stackoverflow.com/questions/1133179
复制相似问题