0

如果我想要所有删除都执行全有或全无。

  1. 如果什么都没有改变。删除组是原子的吗?
  2. 如果我删除外部交易,会有什么变化吗?
  3. 如果我只删除内部事务,组会是原子的吗?
  4. ig我用批量删除替换for-cycle并只留下外部事务?
    // 内部事件计划 dao
    公共无效删除(EventPlan eventPlan){
      最终 Objectify ofy = Objectify.beginTransaction();
      尝试 {
        最终 ActivityDAO activityDao = new ActivityDAO();
        for(最终活动活动:eventPlan.getActivities()){
          activityDao.delete(活动);
        }
        ofy.getTxn().commit();
      } 最后 {
        if (ofy.getTxn().isActive()) {
          ofy.getTxn().rollback();
        |
      }
    }

   

    // 内部活动 dao
    公共无效删除(活动活动){
          最终 Objectify ofy = Objectify.beginTransaction();
       尝试 {
          // 在这里做一些逻辑,删除活动并提交 txn
       } 最后 {
          // 正常检查和回滚
       }
    }

4

1 回答 1

0

如果您使用 Objectify 3.1,那么所有事务都是XG-transactions,它可以在最多 5 个不同的实体组上运行,即如果您的活动没有共同的父级(= 将它们放在同一个实体组中),那么您最多只能删除 5 个一笔交易。

  1. 不,您正在使用并行事务(一个外部,多个内部)。
  2. 不,外部事务没有执行任何操作,所以它什么也不做。有多个内部事务(循环),每个都在进行自己的删除。
  3. 是的,您必须在一个事务中执行所有操作才能使操作成为原子操作。如果您删除内部交易,您就走在了正确的道路上。但是,实体组事务限制仍然适用:事务中涉及的所有实体必须属于同一个实体组,或者(因为默认启用 XG)最多五个不同的实体组(见上文)。请注意,如果您没有明确地将实体放入实体组(通过设置父级),那么每个实体都会获得它自己的实体组。
  4. 是的,批量删除比循环删除更好(由于效率),但第 3 点中的所有事务规则仍然适用。
于 2012-08-06T06:57:49.460 回答