2013-04-03 55 views
0

如果在兩個不同的事務中同時創建具有相同鍵(沒有父鍵)的實體(在它不存在之前),Objectify是否拋出ConcurrentModificationException?我剛剛發現關於該實體已經存在並且被修改,但不是在情況下,它不存在的情況下信息...Objectify - 在同時創建實體的情況下事務拋出ConcurrentModException嗎?

  ofy().transactNew(20, new VoidWork() { 

      @Override 
      public void vrun() { 
       Key<GameRequest> key = Key.create(GameRequest.class, numberOfPlayers + "_" + rules); 
       Ref<GameRequest> ref = ofy().load().key(key); 

       GameRequest gr = ref.get(); 
       if(gr == null) { 

        // create new gamerequest and add... 
        // <-- HERE 
       } else { 
        ... 
       } 


      } 
     }); 

謝謝!

回答

0

是的,如果該實體組中的任何內容發生更改(包括實體創建和刪除),您將獲得CME。

您顯示的代碼應該正常工作。除非您真的知道自己在做什麼,否則只需使用transact()方法而不嘗試限制重試或強制新事務即可。 99%的時間,transact()只是做正確的事情。

+0

即使我們沒有指定父/實體組,因此無法確定實體創建的數據存儲中的「哪裏」? – TMeyer 2013-04-04 14:19:20

+0

如果您未指定父級(或者爲空父級),那麼您的實體*就是實體組的根目錄。沒有歧義。 – stickfigure 2013-04-04 16:03:58

相關問題