我正在更改我的JPA代碼以利用線程。我有一個單獨的實體管理器和每個線程的事務。JPA原子查詢/保存爲多線程應用程序
我用什麼有(對於單線程環境)是這樣的代碼:
// get object from the entity manager
X x = getObjectX(jpaQuery);
if(x == null)
{
x = new X();
x.setVariable(foo);
entityManager.persist(x);
}
隨着我越來越重複鍵,因爲,我認爲多線程環境中的代碼,getObjectX一個返回null線程,然後該線程被換出,下一個線程調用getObjextX,同時變爲null,然後這兩個線程將創建並保留一個新的X()。
短同步增加的,是有一個原子的方式來獲得/保存-IF-doesn't-存在的價值與JPA或者我應該重新考慮我的做法
編輯:
我使用最新的EclipseLink和MySQL 5.1
編輯2:
我添加同步... MASSIVE性能下降(到如此地步,也不能使用)。將所有數據收集回主線程,然後在該線程上進行創建。
我不得不做相反的事情,創造Foo的東西超出了我的控制範圍,它幾乎保證有重複。我將不得不收集線程中的所有數據,然後將它們全部存儲在一個線程中。 – TofuBeer 2010-06-07 20:24:32