簡體   English   中英

Hibernate中的單向一對多映射會生成冗余更新

[英]Unidirectional one-to-many mapping in Hibernate generates redundant updates

我定義了兩個類,Parent和Child。 父母可以有一個孩子的列表。

@Entity
public class Parent {
    @Id
    @GeneratedValue(...)
    @SequenceGenerator(...)
    private long id;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false)
    private List<Child> children;

    public Parent() {
        children = new ArrayList<Child>();
    }

    public void addChild(Child child) { children.add(child); }
}

@Entity
public class Child {
    @Id
    @GeneratedValue(...)
    @SequenceGenerator(...)
    private long id;

    // The "Child" table in the db also has a not-null "parent_id" column.
}

如果我將一堆子項添加到列表中並保持父項一切正常工作:Hibernate獲取序列值,存儲父項,然后存儲所有子項。

但是,完成所有這些操作后,它會更新所有子項,將“parent_id”設置為插入中已設置的值!

生成的SQL如下所示:

insert into PARENT (id) values (1)
insert into CHILD (parent_id, id) values (1, 1)
insert into CHILD (parent_id, id) values (1, 2)
insert into CHILD (parent_id, id) values (1, 3)
update CHILD set parent_id = 1 WHERE id = 1
update CHILD set parent_id = 1 WHERE id = 2
update CHILD set parent_id = 1 WHERE id = 3

如果我使這個關聯雙向,它工作正常,但然后我需要在我的子類中引用父,這是我想要避免的。

存儲庫是Spring Data JPA存儲庫:

public interface ParentRepository extends PagingAndSortingRepository<Parent, Long> {}

創建和保存對象的(簡化)代碼:

Parent parent = new Parent();
parent.addChild(new Child());
parent.addChild(new Child());
repo.save(parent);

有什么建議么?

你有沒有嘗試過:

@JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false, insertable=false, updatable=false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM