簡體   English   中英

為什么persist方法被調用兩次?

[英]Why is persist method called twice?

在服務級別中,我從Entity1類創建一個新對象並將其持久化,然后在其上調用設置方法。 但畢竟,將創建Entity1中的另一個對象並將其插入數據庫中(因此,我將在Entity1表中的兩行插入數據庫中而不是一行)。 MyEntity1與自身具有many-to-many關系,我在調用persist方法之后進行設置。 我的問題是我找不到為什么在我的應用程序中創建了另一個Entity1對象。

我的服務等級:

MyEntity1 e1 = new MyEntity1();
em.persist(e1); 
MyEntity2 e2 = new MyEntity2();
e2.setChild(e1);
e2.setParent(e1);
e1.getParent().add(e2);
e1.getChildren().add(e2);

MyEntity1類與其自身具有兩個oneToMany關系(它是具有附加列的manyToMany關系):

MyEntity1類:

 @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "child", orphanRemoval = true)
    private List<MyEntity2> parent = new ArrayList<MyEntity2>();

 @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")  
    private List<MyEntity2> children= new ArrayList<MyEntity2>();

如果我正確理解了您(沒有一些代碼就很難做到),那么您將持久化一個實體,然后將關系添加到另一個實例嗎?

當您在實體上調用persist時,它將成為managed entity ,這意味着JPA提供者現在可以管理其生命周期。 這意味着您不再需要調用merge或對其進行persist保存更改。 JPA提供程序會自動執行此操作,這就是第二個實體也得以保留的原因。

MyEntity e1 = new MyEntity();
em.persist(e1); // this persists the entity, and makes it managed 
MyEntity e2 = new MyEntity();
e1.setRelation(e2);
// this will also persist (if cascade is properly configured) e2 at the end of transaction, without you persisting it manually

暫無
暫無

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

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