2014-10-29 46 views
1

情境:Grails .save(flush:true)不會立即保存數據

我使用Grails資源和名爲firstService的服務發送請求;

第一個請求的任務是

  1. 節省了一本書實例BOOK1 book1.save(flush: true);
  2. 在同一時間等待60秒或BOOK1的屬性是由第二個請求另一個請求更新

但當我用book1.save(flush: true);保存時,它不會立即保存,這就是爲什麼在60秒內第二個請求無法找到該book1實例;

第二個請求的任務只是更新第一個請求的數據。

我該如何解決問題?

+0

是,如果是,有多少你的對象仍然存在於數據庫花費的時間? – Abs 2014-10-29 08:54:10

+0

Book是一個域對象,甚至在book1.save(flush:true)之後顯示主鍵ID,但是我無法獲得第二個請求中的數據 – 2014-10-29 09:32:15

+0

您是否在保存期間檢查是否違反了任何約束:failOnError:true ? – Abs 2014-10-29 09:48:30

回答

6

book1.save()不返回true,返回自身(book1)或錯誤時返回null。

有四種方式說,如果對象可以前保存保存

  • validate方法。它應該返回true
  • hasErrors屬性之前保存。它應該返回false,如果一切正常
  • save方法返回實例
  • save(failOnError: true)參數驗證失敗時

如果你完全肯定的是,對象被保存然後檢查引發錯誤這個:

  • 你是否將對象保存在測試環境中?測試會清理數據庫,您必須在每個對象中創建對象或使用setup方法創建它
  • 您是否將對象保存在服務中?服務是事務性的,因此如果在保存後引發錯誤,那麼所有的事務都會回滾。

注:每個Grails的開發人員必須閱讀@pledbrook文章GORM Gotchas

+1

另一篇很長的文章是11篇系列文章,指出了Hibernate/GORM的許多主要問題:http://rpeszek.blogspot.com/2014/08/i-dont-like-hibernate-and- grails-part-1.html – 2014-10-29 15:38:04

+0

如果你發現服務中拋出的錯誤,該怎麼辦?交易是否會回滾? – Omnipresent 2017-09-23 09:47:48

相關問題