簡體   English   中英

JPA EclipseLink添加/更新實體

[英]JPA EclipseLink Adding/Updating entities

我對JPA處理添加/更新實體的方式有些困惑。

自動取款機,我有這段代碼:

AltContact c = new AltContact("test");
save(c)
System.out.println("ENTITY: " + contains(c));
c.setEnterpriseName("test2");
save(c);
System.out.println("ENTITY: " + contains(c));

save方法是我的應用程序服務器端請求在EntityManager上進行合並的一種簡單方法:

public void save (Object e) {
    em.merge(e);
    em.flush();
}

其中emEntityManager

contains再次是服務器端的一種方法,該方法將詢問實體管理器當前當前持久上下文中是否存在給定實體。

上面的代碼在我的表中創建了兩行,第一行的值為“ test”,另一行的值為“ test2”,這不是我想要的。

我想用值“ test”創建一個新行,然后在創建該行后立即對其進行更新,並將其值設置為“ test2”。 我在兩次調用save之后都打印了包含的返回,兩次都返回了false

我猜問題出在以下事實:我的實體在第一次調用save之后不屬於持久上下文,因此當我再次調用save時,實體管理器認為它是一個新實體,並創建了一個新行。

如何實現此更新過程?

一些東西。 首先,為什么要使用merge()序列化實例,為什么? 如果僅編輯從持久性上下文返回的對象,則無需進行任何合並或保存。

如果需要將對象編輯為序列化或分離的,則對於新對象,需要從保存中返回對象的ID,這將鏈接分離的對象與托管對象。 理想情況下,您將在執行編輯之前執行find()以獲取對象。

暫無
暫無

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

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