如何更新grails

时间:2016-04-05 20:42:25

标签: hibernate grails gorm

我们允许数据库中的重复记录,但id除外。更新记录时,我们希望查找并更新任何重复项。通过研究,我发现了Hibernate的事件方法beforeUpdate和afterUpdate。问题是,当我发现重复并开始迭代它们时,我得到了这个错误:

错误:行被另一个事务更新或删除(或未保存的值映射不正确)

以下是我在域中的afterUpdate代码:

1      def afterUpdate() {
2          println "\n*** afterUpdate ***"
3          def record = this
4
5          DomainObject.createCriteria().list() {
6              ne( 'id', record.id )
7              or {
8                  eq( 'storeId', record.storeId )
9                  and {
10                     eq( 'firstName', record.firstName )
11                     eq( 'lastName', record.lastName )
12                     eq( 'dateOfBirth', record.dateOfBirth )
13                 }
14             }
15             //eq( 'lastUpdated', record.lastUpdated )
16         }.each { dupe ->
17             log.info "syncing ${dupe.id} with ${record.id}"
18             dupe.properties.each{ key, value ->
19                 println "*** prop: ${key}: ${value}"
20             }
21         }
22     }
23

错误在第19行。我们正在使用Grails 2.4.4并在Windows上开发

1 个答案:

答案 0 :(得分:2)

看看Uri page。请注意本节有关class Person { String name def beforeDelete() { ActivityTrace.withNewSession { new ActivityTrace(eventName: "Person Deleted", data: name).save() } } }

的使用
{{1}}
  

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

     

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