我對JPA處理添加/更新實體的方式有些困惑。JPA EclipseLink添加/更新實體
ATM,我有這段代碼:
AltContact c = new AltContact("test");
save(c)
System.out.println("ENTITY: " + contains(c));
c.setEnterpriseName("test2");
save(c);
System.out.println("ENTITY: " + contains(c));
的保存方法是在我的應用程序的服務器端的簡單方法要求對EntityManager的合併:
public void save (Object e) {
em.merge(e);
em.flush();
}
其中em是EntityManager
的實例。
包含再次是服務器端的一種方法,它會詢問實體管理器在當前持久化上下文中是否存在給定的實體。
上面的代碼在我的表中創建了兩行,第一個值爲「test」,另一個值爲「test2」,這不是我想要的。
我想創建一個值爲「test」的新行,然後,在創建行後立即更新它並將其值設置爲「test2」。我打印出來的包含的回報,雙方打電話給保存,false
被退回了兩次。
我想來自於事實,我的實體是不是第一次調用保存所以,當我再次撥打保存後持久性上下文的一部分的問題,實體管理器認爲這是一個新的實體,並創建一個新排。
如何才能實現這個更新過程?
我認爲這個答案(http://stackoverflow.com/a/1070629/1256525)到一個類似的問題應該可以解決你的問題。 – semTex