2013-01-11 57 views
1

我正在使用JPA 2.0開發Web應用程序,並且在每個請求上打開和關閉EntityManager。用戶可以創建一個新的實體,並設置id字段(該字段有意義,我不能更改表結構)。爲了存儲新實體,我必須使用EntityManager的「合併」方法,但是當已經存在具有相同id的現有實體時,它就會被更新。 我是否必須手動檢查是否已經存在具有相同ID的實體,或者可以以更好的方式完成此操作?或者我的方法有什麼不對嗎?JPA:使用現有ID合併實體

+0

爲什麼你「必須使​​用」merge「-method」?如果實體已經存在,你想要做什麼? –

+0

我無法使用persist,因爲我在每個請求上創建(並關閉)了我的實體管理器實例,因此我的實體已分離。我想阻止用戶更新現有的實體,當他真的想創建一個新的實體。 – user1969951

+0

我不需要用戶合併,我可以使用堅持 - 不知何故,我認爲我不能... – user1969951

回答

1

如果您使用persist方法,將會爲重複的ID引發EntityPersistsException

這就是說,從用戶的角度來說,他越早知道一個ID已經被使用,越好(最好是,當字段更新檢查它與ajax)。

+0

我不能使用持久性,因爲我在每個請求上創建我的entitymanager實例。例如。在第一個請求中,我讀取要在表中顯示的實體,在第二個請求中存儲新創建的實體。 – user1969951

+0

爲每個請求創建一個新對象。如果我理解正確,那麼您只是添加新的實體,並且不希望對已經在數據庫中的實體持續進行更改。不要使用分離的實體作爲存儲新值的對象。 – SJuan76

+0

我對JPA沒有多少經驗,但afaik我不得不使用合併來附加一個實體(我已經在做)。也許你可以澄清一點? – user1969951