我有这样的场景:
public abstract class AbstractEntity {
@Id @GeneratedValue(strategy = GenerationType.TABLE)
protected Long id;
}
public class User extends AbstractEntity {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Set<Dependent> dependents;
}
public class Dependent extends AbstractEntity {
@ManyToOne
@JoinColumn
private User user;
}
当我尝试insert()
一个新的User
实例,其中一些Dependent
已经存在于数据库中,它们意味着什么填充了 id
字段后,我收到一个 DetachedEntitypassed to persist
异常。
可以通过从数据库手动加载所有Dependent
来解决这个问题,但看起来不太对劲。
我想知道如何让 JPA 在填充 id
字段时自动加载它们。我怎样才能做到这一点?
最佳答案
如果您使用 JPA API,请使用:
EntityManager.merge(T t)
而不是
EntityManager.persist(Object object)
由于您使用的是 CascadeType.ALL,因此当您使用合并时,JPA 提供程序将尝试更新用户(如果它们存在于数据库中)或创建新用户。
文档:http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html .
关于java - JPA - 自动重新加载 @OneToMany 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37285045/