2014-10-29 4 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

+0

Книга является объектом домена, и даже она показывает идентификатор первичного ключа после book1.save (flush: true), но я не мог получить данные во втором запросе –

+0

Вы проверили, есть ли какое-либо ограничение во время сохранения, используя: failOnError: true ? – Abs

ответ

6

книга1.save() не возвращается true, возвращается сама (книга1) или возвращает null при ошибках.

Есть четыре способа, чтобы сказать, если объект может быть сохранен

  • validate метод перед тем сохранить. Он должен возвращать true
  • hasErrors Недвижимость до сохранить. Он должен вернуться ложным
  • 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 –

+0

Что делать, если вы поймаете заброшенную ошибку в сервисе. Будет ли транзакция еще откат? – Omnipresent

Смежные вопросы