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).