Hibernate 休眠与独立父级的多个关系
我有两个单位 1)被提名人 对于代名人管理,我有单独的UI和操作,而且这个代名人还用于其他模块,如Loan等,因此它没有任何映射关系 2)保险,其代码如下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
@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表中的任何链接,但如果被触动了被提名者表,我会非常惊讶。