我一直用Grails中的格式化数据库保存实体...
def jim = new User(name: "Jim",
emailAddress: "jim@hotmail.com",
backOfficeUser: false,
dateCreated: Instant.now(),
lastUpdated: Instant.now(),
passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt())).save(flush: true)
这一切似乎都工作正常,直到导致.save()和save(flush:true)的东西返回null。如果我将声明更改为此,则可以正常工作......
def jim = new User(name: "Jim",
emailAddress: "jim@hotmail.com",
backOfficeUser: false,
dateCreated: Instant.now(),
lastUpdated: Instant.now(),
passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt()))
jim.save(flush:true)
然后,Jim实例会立即拥有数据库序列发出的id,并在调用save时保持不变。
答案 0 :(得分:4)
在grails中,如果save成功,则保存返回已保存的实例,否则返回null。请参阅save reference说明部分。添加failOnError: true
以检查验证是否失败
答案 1 :(得分:1)
事实证明,当我们遇到数据库供应商在高负载(Percona)下可能遇到的特定死锁异常时,团队中的另一个开发人员已经覆盖了save方法以重试。
在这个新的保存方法中,我们不再返回实例。