我有两个对象。
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).
有什么方法可以解决这个问题?
答案 0 :(得分:2)
save
内afterUpdate
失败的原因是因为您没有使用withNewSession
。 http://jsfiddle.net/3eqz2/421/指出了这一细节。
注意上面使用withNewSession方法。因为事件是 在Hibernate使用持久化方法冲洗时触发了 除非您运行,否则
save()
和delete()
不会导致保存对象 使用新会话进行操作。幸运的是,withNewSession方法允许您共享相同的内容 事务性JDBC连接,即使您使用不同的连接 基础会议。