GRAILS GORM如何在保存子项时自动更新父属性

时间:2016-05-27 16:59:39

标签: hibernate grails gorm

我有两个对象。

TimeFrame{

  hasMany=[activity:Activity]

   Date startTime
   Date endTime
   Integer activeActivities

}

Activity{
   belongsTo=[timeFrame:TimeFrame]

  String name
  String description
  Date start
  Date end

}

我随时插入,更新或删除活动我想自动更新时间范围内的activeActivities数。但是当我添加GROM事件方法时......

def afterUpdate(){
    try{

        def num=0;
        def now=new Date();
        timeFrame.activities.each{i->
            if(!i.end || i.end < now){
                num+=1;
            }
        }
        timeFrame.activeActivities=num;
        timeFrame.save();
    }
    catch(e){
        log.debug('Unable to update active tally on Activity update:'+e)
    }
}

我收到错误

  null id in com.application.tracker.Activity entry (don't flush the Session after an exception occurs).

有什么方法可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

saveafterUpdate失败的原因是因为您没有使用withNewSessionhttp://jsfiddle.net/3eqz2/421/指出了这一细节。

  

注意上面使用withNewSession方法。因为事件是   在Hibernate使用持久化方法冲洗时触发了   除非您运行,否则save()delete()不会导致保存对象   使用新会话进行操作。

     

幸运的是,withNewSession方法允许您共享相同的内容   事务性JDBC连接,即使您使用不同的连接   基础会议。