1

我一直在使用以下速记将我的数据库中的实体保存在 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 时持久化。

4

2 回答 2

5

在 grails 中,如果保存成功,则保存返回已保存的实例,否则 - 它将返回 null。请参阅保存参考说明部分。添加failOnError: true以检查验证是否失败

于 2013-05-30T19:22:38.300 回答
1

事实证明,当我们遇到数据库供应商在高负载下可能遇到的特定死锁异常 (Percona) 时,团队中的另一位开发人员重写了 save 方法以重试。

在这个新的保存方法中,我们不再返回实例。

于 2013-05-30T22:39:26.863 回答