测试中带有@MapsId批注的子实体中的PersistenceObjectException

时间:2018-07-19 13:41:57

标签: hibernate spring-boot spring-data-jpa

我有以下两个实体,父级和子级。父母没有外地孩子。

子实体的定义如下:

@Entity
@Table(name = "child")
@Audited
public class Child extends BaseEntity {

    @OneToOne
    @JoinColumn(name = "application_id")
    @MapsId
    @NotAudited
    private Parent parent;
....

我正在编写一个测试,我想创建一个父实体和一个子实体,并保存它们。因此,我执行以下操作:

parentRepository.save(parent);

Child child = new Child(parent);
childService.save(child);

但是,出现以下错误:

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: io.manuel.Parent; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: io.manuel.Parent

问题是,如果我删除了@MapsId注释,它将起作用。我该怎么做才能使其与注释一起使用?

1 个答案:

答案 0 :(得分:0)

您需要这样做

Parent savedParent = parentRepository.save(parent);

Child child = new Child(savedParent);
childService.save(child);

您必须掌握持久对象并使用它。这就是异常的意思,您正在传递一个分离的(非持久性)实体进行保存。这是一个实体可以处于的不同状态的示意图。

enter image description here