当我执行合并父表时遇到问题,现有的子记录将是插入而不是更新。
例如,成员(父)和地址(子)表,
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;
}
当我执行更改和合并(成员)时,正在插入地址记录而不是更新现有记录。
有谁知道这是什么原因?
答案 0 :(得分:0)
执行更改时,是否设置了正确的address_id? 。做一些调试,发现address_id与地址表中的现有id匹配。
我的方法课程中的将如下所示。我认为不需要member_id属性。因为它与成员的id属性相同。
public class Address实现Serializable {
@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;
}
}
答案 1 :(得分:0)
我在快照代码中看不到任何父子关系。
请使用以下代码修改子类的代码以创建继承关系。
public class Child extends Member implements Serializable{
将Child类扩展为Parent(Member)将反映与延迟加载相关的所需更改。