我有一个非常奇怪的问题,我在域中使用grails afterUpdate来保存db上的活动。
用于在我的集合“DatabaseEvent”中创建记录的代码在控制器中工作并完美地保存对象但是相同的代码不是在afterUpdate()方法中保存对象,
即使代码正在执行并且没有给出任何错误,但仍然没有保存对象
def afterUpdate () {
println "==++++==="
def dbEvent = new DatabaseEvent(type: "Created", entityClass : "Central Zone", objectId: this.id )
if(!dbEvent.save()){
println "======"
dbEvent.errors.each{
println it
}
}
else{
println "saved=="
}
}
它打印出“== ++++ ===”并进入其他并打印保存== 但是对象没有保存在db中,我使用的是mongodb
有时它给出了stackoverflow错误并在一次调用中创建了很多条目,我不明白它,任何解决方案吗?
我已经编辑了这个问题,我注意到当我使用save(flush:true)并在一次调用中创建了大量记录时,它给了我stackoverflow,如果我不使用它,它只是不创建任何??
答案 0 :(得分:1)
服务层中的事务与相关的数据源耦合,在这里你需要发起一个事务来保存这样的数据
def afterUpdate () {
println "==++++==="
DatabaseEvent.withTransaction { status->
def dbEvent = new DatabaseEvent(type: "Created", entityClass : "Central Zone", objectId: this.id )
if(!dbEvent.save()){
println "======"
dbEvent.errors.each{
println it
}
}
else{
println "saved=="
}
}
}