Grails:.save(flush:flush,insert:true)与.save(flush:true)有何不同?

5
在Spring Security生成的类中,可能是UserRoleSecUserSecRole(你可以随意命名),有一个命令new UserRole(),并使用.save(flush:flush, insert:true)保存它。这是什么意思?与.save(flush:true)相比,它有何不同?
2个回答

5

来自Grails文档:

insert(可选) - 如果设置为true,将强制Hibernate执行SQL INSERT,在涉及遗留数据库(如AS/400)且Hibernate无法检测是要进行INSERT还是UPDATE时,这很有用。


那么对于像H2或MySQL这样的“常见”数据库,这些.save()操作会执行完全相同的操作吗? - Mikey
@doelleri - 检查Hibernate执行的查询语句,如果您确定对象不存在,insert:true可能会减少一个查询语句,在某些情况下检查是否需要更新。 - Sudhir N

4

人们通常使用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!这种情况比您想象的要少。希望这可以帮到您,而在关于flush的对话中没有任何厕所幽默...感到非常自豪 :)
URL: http://grails.1312388.n4.nabble.com/When-to-use-domain-save-flush-true-or-domain-save-td2289869.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接