我有2个人参加
1)被提名人 对于Nominee管理,我有单独的UI和操作,这个被提名者也用于其他模块以及贷款等。所以它没有任何映射关系。
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);
这样可以正常工作,因为它将记录插入Insurance和Insurance_Nominee表。
但是当我试图删除这份保险记录时,它也会从被提名表中删除记录,但这不应该发生,因为该被提名人在其他模块中也被用作贷款等。
删除代码如下所示
getHibernateTemplate()删除(保险);
那么如何在保险域实体中指定该关系呢?
答案 0 :(得分:0)
在你的地图中
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID")}, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID")})
您正在定义级联选项,因此这将自动保存子记录。同样的情况也会发生删除,因为删除它会调用级联删除,这将删除父记录时删除相关记录。
你不能指望一个没有父母的孩子。
答案 1 :(得分:0)
代表Insurance
:
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "INSURANCE_NOMINEE", joinColumns = { @JoinColumn(name = "INSURANCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "NOMINEE_ID") })
和Nominee
:
@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;
}