java - Hibernate 合并父级并更新惰性子级集合列表

标签 java hibernate

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

例如,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/

相关文章:

java - Hibernate 4.3 显示 SQL 参数

java - Hibernate继承SingleTable子类连接

java - 如何动态构造查询以过滤Spring JPA中的结果?

java - 公共(public) io FileUtils.writeStringToFile

java - 更改 Hibernate 映射的目标表

java - 哪个 Java 方法调用了我的构造函数?

java - 输入字符串时从字符串中删除字符

java - ORA-01465 : invalid hex number or data mismatch error using hibernate jpa and oracle in coalesce

java - MyBatis 没有找到适合 jdbc 的驱动 :sqlserver

java - hibernate 不将条目保存到 postgresql 数据库