持久的父母 - 子女 - 孙子女 - 曾孙关系

时间:2021-01-28 22:47:55

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

我有 4 个实体。除了父母和曾孙之外,每个人都有多对一或一对多的关系。

是否可以通过在单个保存中保存以下关系,在这种情况下,“EntityA”存储库是什么?

我在本地尝试通过创建一个 json 版本来保存其中包含所有嵌套信息,但似乎发生的是我只能通过 entityA 存储库在一次保存中保存 EntityA 和 EntityB 并且不得不保存 EntityC和 EntityD 通过 EntityC 存储库单独调用。

我在所有 OneToMany 关系上都使用了 CASCADE.ALL,甚至用 CASCADE.MERGE + CASCADE.PERSIST 尝试过,但仍然出现相同的错误。

我得到的错误是:

detached entity passed to persist: model.EntityC

我通过简单地执行 EntityA.setEntityBs() -> EntityB.setEntityCs() -> EntityC.setEntityDs() 来设置每个子实体

在这种情况下,最佳实践是什么?在 EntityA Repo 的单个调用中进行保存是可能的,还是最好的方法?

@Entity
public class EntityA {

    //...

    @OneToMany(mappedBy="")
    private Set<EntityB> entityBs;
    
    // getters and setters
}
@Entity
public class EntityB {
    
    //...
    @ManyToOne
    @JoinColumn(name="entityA_id", nullable=false)
    private EntityA entityA;

    @OneToMany(mappedBy="")
    private Set<EntityC> entityCs;

    public EntityB() {}
    
    // getters and setters
}
@Entity
public class EntityC {
    
    //...

    @OneToMany(mappedBy="")
    private Set<EntityD> entityDs;

    @ManyToOne
    @JoinColumn(name="entityB_id", nullable=false)
    private EntityB entityB;

    public EntityC() {}
    
    // getters and setters
}
@Entity
public class EntityD {
    
    //...

    @ManyToOne
    @JoinColumn(name="entityC_id", nullable=false)
    private EntityC entityC;

    public EntityD() {}
    
    // getters and setters
}

预先感谢您对此的任何回复

0 个答案:

没有答案