Grails 3 / GORM - 记录更改时记录条目

时间:2017-03-17 16:57:05

标签: grails gorm grails3

我有以下用户类:

class User implements Serializable {

    private static final long serialVersionUID = 1

    transient springSecurityService

    String username
    String password
    String email

    String firstName
    String middleName
    String lastName

    ...

}

我想在第一个,中间名或姓氏更改时创建一个新的域对象UserNameChange:

class UserNameChange {
    User user
    String firstName
    String middleName
    String lastName
}

我知道我可以在事务服务中执行此操作,但如果我可以在User类中完成相同的操作会更好。我怎样才能原子地做到这一点?例如," beforeUpdate"总是以交易方式完成?

1 个答案:

答案 0 :(得分:0)

默认情况下,域类的方法不是事务性的。所以你必须使用withTransaction()

class User {
  def beforeUpdate() {
    if( ![ 'firstName', 'middleName', 'lastName' ].any{ isDirty it } ) return 
    User.withTransaction{
      new UserNameChange( ... ).save()
    }
  }
}

您可能还想查看audit plugin