级联Type.ALL无法正常工作

时间:2011-02-24 16:17:37

标签: jpa-2.0 hsqldb

我已经在我的实体关系中设置了CascadeType.ALL,但是当我持有一个实体时,它部分工作。

Ex: `成员实体:

@OneToMany(mappedBy="member", cascade={CascadeType.ALL})
private List<ContactInfo> contactInfos;

和ContactInfo实体:

@ManyToOne
@JoinColumn(name="MEMBERID")
private Member member;

`

Member详细信息以及ContactInfo数据都会保留。但是Member.Id表中的ContactInfo没有更新,因为我在ContactInfo表中有可空的外键约束。

每当我坚持会员时,我如何让JPA自动更新ContactInfo中的Member.Id?

此致

萨蒂亚

1 个答案:

答案 0 :(得分:3)

如果您使用CascadeType.ALL仅在ContactInfo中级联成员,则成员是拥有方。您必须删除mappedby,复制@JoinColumn信息并将@ManyToOne端放置为不可插入且不可更新。这将告诉hibernate在保存成员时必须更新CONTACTINFO的MEMBERID。

以下是映射:

会员实体:

@OneToMany
@JoinColumn(name="MEMBERID") //we need to duplicate the physical information
private List<ContactInfo> contactInfos;

联系实体:

@ManyToOne
@JoinColumn(name="MEMBERID", insertable=false, updatable=false)
private Member member;

Reference Hibernate Section 2.2.5.3.1.1