2013-05-30 67 views
0

我一直保存在我的數據庫實體與以下簡寫Grails的...Grails的保存方法返回null

def jim = new User(name: "Jim", 
       emailAddress: "[email protected]", 
       backOfficeUser: false, 
       dateCreated: Instant.now(), 
       lastUpdated: Instant.now(), 
       passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt())).save(flush: true) 

這一切都似乎是工作的罰款,直到東西引起.save()和save(齊平:true)返回null。如果我改變了語句這一點,但工作罰款......然後

def jim = new User(name: "Jim", 
      emailAddress: "[email protected]", 
      backOfficeUser: false, 
      dateCreated: Instant.now(), 
      lastUpdated: Instant.now(), 
      passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt())) 
      jim.save(flush:true) 

吉姆實例將立刻擁有由數據庫序列發出的ID和保存被稱爲時依然存在。

+2

嘗試在'save'中爲第一種情況添加'failOnError:true'來查看是否有任何驗證錯誤。 – dmahapatro

回答

3

在grails中保存返回保存的實例,如果保存成功,如果不成功 - 它將返回null。請參閱save reference說明部分。添加failOnError: true來檢查驗證是否失敗

1

事實證明,當我們遇到數據庫供應商在高負載(Percona)下可能遇到的特定死鎖異常時,團隊中的另一位開發人員已重寫保存方法以重試。

在這個新的保存方法中,我們不再返回實例。