java - JPA - 自动重新加载 @OneToMany 依赖项

标签 java hibernate jpa

我有这样的场景:

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/

相关文章:

java - Spring事务边界和DB连接保持

java - Hibernate JPA 使用 InheritanceType.JOINED 为每个类创建一个表

java - <f : validator> and ajax in JSF 问题

spring - 如何在Hibernate HQL中按字母顺序排序结果?

java - JPA 2.1 外键未在 ManyToOne 级联上保存

java - Spring boot - 更新一个实体后,一对一关系未反射(reflect)在两个表上

Java-Hibernate连接数据库

Java 集合 API 错误?

java - 使用 Java 计算字符串中子字符串的出现次数和顺序

java - 如何在剧中显示 SPARQL 查询的输出!看法?