Hibernate 休眠与独立父级的多个关系

Hibernate 休眠与独立父级的多个关系,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我有两个单位 1)被提名人 对于代名人管理,我有单独的UI和操作,而且这个代名人还用于其他模块,如Loan等,因此它没有任何映射关系 2)保险,其代码如下 @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColum

我有两个单位

1)被提名人 对于代名人管理,我有单独的UI和操作,而且这个代名人还用于其他模块,如Loan等,因此它没有任何映射关系

2)保险,其代码如下

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID") })
public Set<Nominee> getNomineeList() {
    return nomineeList;
}

public void setNomineeList(Set<Nominee> nomineeList) {
    this.nomineeList = nomineeList;
}
Insurance insurance = buildInsuranceDomain(insuranceForm);
getHibernateTemplate().merge(insurance);
这可以很好地工作,因为它将记录插入到保险和保险被提名人表中

但当我试图删除这个保险记录时,它也会从被提名人表中删除记录,但这不应该发生,因为被提名人被用于其他模块,如贷款等

删除代码如下所示

getHibernateTemplate().delete(保险)

那么如何在保险域实体中指定该关系呢?

在映射中

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID")}, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID")})
您正在定义cascade选项,以便自动保存子记录。删除时也会发生同样的情况,因为删除时会调用cascade delete,它将在删除父记录时删除相关记录


你不能指望孩子没有父母

对于
保险

@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID") })
对于
提名人

    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
    @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "NOMINEE_ID") }, inverseJoinColumns = { @JoinColumn(name = "INSURANCE_ID") })
public Set<Insurance> getInsuranceList() {
    return insuranceList;
}
@ManyToMany(cascade=CascadeType.MERGE,fetch=FetchType.LAZY)
@JoinTable(name=“INSURANCE\u namegate”,joinColumns={@JoinColumn(name=“namegate\u ID”)},inverseJoinColumns={@JoinColumn(name=“INSURANCE\u ID”)})
公共集getInsuranceList(){
退货保险单;
}

根据我对您问题的理解,您必须保留子值,但这是不可能的。删除父项时,子项将被删除。无论如何,如果您要保留该值,请删除两个表的链接。没有父项没有子项。您确实尝试过此操作吗?我希望删除保险实例会删除该记录和join表中的任何链接,但如果被触动了被提名者表,我会非常惊讶。