Grails: что делает .save (flush: flush, insert: true) отличается от .save (flush: true) - PullRequest
4 голосов
/ 16 февраля 2012

В сгенерированном весеннем классе безопасности UserRole или SecUserSecRole (вы можете называть его по своему выбору) есть команда для создания new UserRole() и сохранения ее с помощью .save(flush:flush, insert:true)

Что делаетэто значит?Чем он отличается от .save (flush: true)?

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Из документов Grails :

insert (необязательно) - при значении true Hibernate будет выполнять SQL INSERT, это полезно в определенных ситуациях, когда устаревшие базы данных (такие как AS / 400), и Hibernate не может определить, нужно ли сделать ВСТАВКУ или ОБНОВЛЕНИЕ

4 голосов
/ 27 июня 2013

Люди обычно используют flush (), потому что им неудобно, как работает Hibernate.

Если вам нужно узнать об этом больше, проверьте это http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/

Бывают случаи, когдаоднако это необходимо, особенно если вы работаете в том же потоке, что и вызов save (), и вам необходимо убедиться, что объект Domain сохраняется в БД.Кроме того, некоторые ограничения в вашем домене используют базу данных для проверки правильности данных.Иногда необходимо убедиться, что проверка работает.Вот пример этого здесь:

http://johnrellis.blogspot.com/2009/09/grails-constraints-across-relationships.html

Таким образом, вы должны использовать flush только в том случае, если вам действительно нужно что-то в DB RIGHT NOW!Это меньше раз, чем вы думаете.Надеюсь, что это поможет, а не унитаз юмора в разговоре о промывке ... так горд:)

URL: http://grails.1312388.n4.nabble.com/When-to-use-domain-save-flush-true-or-domain-save-td2289869.html

...