Hibernate与独立父级的ManyToMany关系

时间:2013-11-25 04:26:09

标签: hibernate hibernate-mapping

我有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()删除(保险);

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

2 个答案:

答案 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;
}