2012-08-08 52 views
0

以下問題:JPA如何將非託管實體對象與數據庫同步(按值調用)

關聯:| Shop | --1 -------- n - > |產品|

所以我有一個實體名爲店鋪,可以有很多產品。

我開發了一個叫的函數void addProductToShop(Shop shop,Product product);

它看起來是這樣的:

public void addProductToShop(Shop shop, Product product) 
{ 
    entityManager = entityManagerFactory.createEntityManager(); 
    entityManager.getTransaction().begin(); 

    shop = entityManager.merge(shop); 
    shop.getProductList.add(product); 

    entityManager.getTransaction().commit(); 
    entityManager.close(); 
} 

一切正常,並正確地寫入到數據庫中。 問題是,這兩個實體沒有在我的應用程序代碼中更新。

所以在打電話addProductToShop(shop,product);你必須更新兩個變量店鋪產品因爲他們沒有最新的變化(因爲callByValue)。

但是作爲這個函數的消費者,我假設我的參數在調用之後被改變,而不僅僅是數據庫。 如何在每次函數調用後不要求更新店鋪產品來實現此目的。

有什麼最佳實踐嗎?

謝謝, 亞歷克斯

回答

0

我覺得entityManager.refresh(對象)是你需要調用兩個車間和產品是什麼。

+0

如何,我應該在我的代碼使用刷新? 我無法在兩個參數上調用刷新,因爲它們不受管理。 我也不明白爲什麼**堅持()**更新對象和**合併()**不。 有人可以建議一個解決方案,我輸入這些參數做數據庫的變化,並讓他們更新爲這個函數的調用者? – Subby 2012-08-09 07:16:39

0

我明白了。

我的錯誤是我應該先改變從參數實體和然後做一個合併...

所以參數具有相同的狀態,合併後的實體有。

小錯誤推理...

問候, 亞歷

相關問題