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

Hibernate GRAILS GORM如何在保存子对象时自动更新父属性,hibernate,grails,gorm,Hibernate,Grails,Gorm,我有两个目标 TimeFrame{ hasMany=[activity:Activity] Date startTime Date endTime Integer activeActivities } 每当我插入、更新或删除一个活动时,我都希望自动更新一个时间范围内的活动数量。但是当我添加GROM事件方法时,比如 def afterUpdate(){ try{ def num=0; def now=new Date();

我有两个目标

TimeFrame{

  hasMany=[activity:Activity]

   Date startTime
   Date endTime
   Integer 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)
    }
}

这有什么办法

更新后,
保存
失败的原因是因为您没有在新闻会话中使用
。报告指出了这一细节

注意上面withNewSession方法的用法。因为事件是 在Hibernate使用持久性方法刷新时触发,如
save()
delete()
不会导致保存对象,除非运行 您的操作将与新会话同步

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


您在更新后的
内保存失败,因为您没有将
与新闻会话一起使用。请参阅文档:aha。关键句子。。。“幸运的是,withNewSession方法允许您共享相同的事务JDBC连接,即使您使用的是不同的底层会话”
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).