0

すべての削除が必要な場合は、all-or-nothingを実行します。

  1. 何も変わらなければ。削除のグループはアトミックになりますか?
  2. 外部トランザクションを削除すると、何か変更されますか?
  3. 内部トランザクションのみを削除した場合、グループはアトミックになりますか?
  4. Ig for-cycleをバッチ削除に置き換え、外部トランザクションのみを残しますか?
    //イベントプラン内dao
    public void delete(EventPlan eventPlan){
      最終的なObjectifyofy= Objectify.beginTransaction();
      試す {
        最終的なActivityDAOactivityDao= new ActivityDAO();
        for(final Activity activity:eventPlan.getActivities()){
          activityDao.delete(activity);
        }
        ofy.getTxn()。commit();
      } ついに {
        if(ofy.getTxn()。isActive()){
          ofy.getTxn()。rollback();
        |
      }
    }

   

    //アクティビティdao内
    public void delete(Activity activity){
          最終的なObjectifyofy= Objectify.beginTransaction();
       試す {
          //ここでいくつかのロジックを実行し、アクティビティを削除してtxnをコミットします
       } ついに {
          //通常どおりチェックしてロールバックします
       }
    }

4

1 に答える 1

0

Objectify 3.1を使用する場合、すべてのトランザクションはXGトランザクションであり、最大5つの異なるエンティティグループで動作できます。つまり、アクティビティに共通の親がない場合(=同じエンティティグループに配置する場合)、削除できるのは最大5つだけです。 1つのトランザクション。

  1. いいえ、並列トランザクション(1つの外部、複数の内部)を使用しています。
  2. いいえ、外部トランザクションには操作が実行されていないため、何も実行されません。複数の内部トランザクション(ループ)があり、それぞれが独自の削除を実行します。
  3. はい。操作をアトミックにするには、1つのトランザクション内ですべての操作を実行する必要があります。内部トランザクションを削除すると、正しいパスになります。ただし、エンティティグループのトランザクション制限は引き続き適用されます。トランザクション内でアクセスされるすべてのエンティティは、同じエンティティグループに属するか、(XGがデフォルトで有効になっているため)最大5つの異なるエンティティグループに属している必要があります(上記を参照)。(親を設定することにより)エンティティをエンティティグループに明示的に配置しない場合、すべてのエンティティが独自のエンティティグループを取得することに注意してください。
  4. はい、バッチ削除はループ内で削除するよりも優れていますが(効率のため)、ポイント3のすべてのトランザクションルールが引き続き適用されます。
于 2012-08-06T06:57:49.460 に答える