2
更新同一個對象在我的應用程序兩個紗線嘗試在代碼更新相同的實體如下:不同的線程處於休眠
public static <T> T updateEntity(T entity, long id) {
long start = System.currentTimeMillis();
EntityManager em = null;
EntityTransaction tx = null;
try {
em = GenericPersistenceManager.emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
entity = em.merge(entity);
tx.commit();
LoggerMultiplexer.logDBAccess(start, System.currentTimeMillis(),
String.format(OPERATION_UPDATE_ENTITY, entity.getClass().getName(), id));
return entity;
}
...
有時候,我在提交線得到重複鍵錯誤。我想這是在線程嘗試同時更新實體時發生的。可能嗎?我認爲是這樣,因爲如果我將添加到上面的函數中,我不會得到重複鍵異常。那麼,我是否必須考慮這種併發問題?如果是這樣,如果我有多個線程試圖更新同一個對象,那麼正確的方法是什麼。
實際上,我嘗試更新的實例對象在應用程序生存時間內存在內存中。不同的服務更新實體的不同字段。當發生更新時,通過上述合併操作將其寫入數據庫。我想我應該看看您提供的鏈接以獲得洞察力,謝謝。 – suat 2013-03-04 22:26:37