java—如何在hibernate/jpa中正确地保持复杂的实体关系而不生成重复的条目?

pokxtpni  于 2021-07-11  发布在  Java
关注(0)|答案(0)|浏览(217)

我正在使用hibernate,并编写了一些处理大量实体的业务逻辑,实体类型为“dv”“dv”与多个“st”实体有一对多连接。这些st实体是在运行时创建的。为简单起见,它们是描述“dv”实体的不同状态的条目。st实体又可以与“ks”类型的第三个实体建立多对一连接,后者表示业务逻辑运行的迭代。
所有这些都Map到我的业务逻辑中,其中db可以有几个状态(st),几个dv可以组合在一起(通过st)到一个或多个“ks”对象中。简而言之,我加载一堆dv对象,创建一个ks对象,创建几个st对象,并将它们链接到各自的dv和ks对象。如果业务逻辑再次运行,它可能会加载相同的dv,但会创建一个新的ks,因此dv可以有多个ks。
现在我已经解释了这种情况,下面是我的问题:在我的业务逻辑结束时,我保存了我的db实体,并尝试将树上的所有更改从dv到st再到ks级联。但是,我希望每次运行业务逻辑时都有一个ks(因为它基本上是同一个对象,至少在java端是这样)。但是,当我为每个st对象持久化时,它会插入一个新的ks,而不是将其合并到现有的ks之上。
以下是相关声明:
数字视频:

@Enity
@Table(name = "DV")
public class DV{

    @OneToMany(mappedBy=ST_.DV, cascade={CascadeType.All})
    @Column(name = "ST_ID"
    private final List<ST> st=new ArrayList<>();
}

st公司:

@Entity
@Table(name= "ST")
public class ST{

    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "DV_ID")
    private DV dv;

    @ManyToOne(cascade = {CascadeType.All})
    @JoinColumn(name = "KS_ID")
    private KS ks;
}

堪萨斯州:

@Entity
@Table(name = "KS")
public class KS extends{

    @OneToMany(mappedBy = ST_.KS)
    private final Set<ST> sts= new HashSet<>();
}

谢谢你的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题