Hibernate合并父级并更新Lazy Child Collection List

时间:2016-09-19 15:56:30

标签: java hibernate

当我执行合并父表时遇到问题,现有的子记录将是插入而不是更新。

例如,成员(父)和地址(子)表,

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

当我执行更改和合并(成员)时,正在插入地址记录而不是更新现有记录。

有谁知道这是什么原因?

2 个答案:

答案 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)将反映与延迟加载相关的所需更改。