当我执行合并父表时遇到问题,现有的子记录将被插入而不是更新。
例如,Member(Parent) 和 Address(Child) 表,
public class Member implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member", cascade = CascadeType.ALL)
public List<Address> addressList;
}
public class Address implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int address_id;
@Column(name = "member_id")
private int mem_id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "member_id", referencedColumnName = "id", insertable = false, updatable = false)
})
public Member member;
}
当我执行更改和合并(成员)时,将插入地址记录而不是更新现有记录。
有谁知道这是什么原因吗?
最佳答案
当您执行更改时,您是否设置了正确的address_id? 。进行一些调试,发现address_id与地址表中现有的id匹配。
在我的方法类中将如下所示。我认为不需要 member_id 属性。因为它与成员的 id 属性相同。
公共(public)类地址实现可序列化{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int address_id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "member_id", nullable = false)
public Member member;
public void setMember(Member member) {
this.member = member;
}
}
关于java - Hibernate 合并父级并更新惰性子级集合列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39577294/