【问题标题】:Grails: what does .save(flush:flush, insert:true) do differently from .save(flush:true)Grails:.save(flush:flush, insert:true) 与 .save(flush:true) 有何不同
【发布时间】:2012-03-07 06:25:22
【问题描述】:

在 spring security 生成的类UserRoleSecUserSecRole(你可以随便调用它)有一个命令可以创建一个new UserRole() 并用.save(flush:flush, insert:true) 保存它

这是什么意思?它与 .save(flush:true) 有何不同?

【问题讨论】:

    标签: grails insert spring-security save flush


    【解决方案1】:

    来自Grails docs

    insert (可选) - 当设置为 true 时将强制 Hibernate 执行 SQL INSERT,这在遗留数据库的某些情况下很有用 (如AS/400),Hibernate无法检测到是否 执行 INSERT 或 UPDATE

    【讨论】:

    • 那么对于像 H2 或 MySQL 这样的“通用”数据库,.save()s 会做同样的事情吗?
    • @doelleri - 检查休眠触发的查询,我认为,如果您确定该对象不存在,insert:true 可能会减少一个选择查询以检查在某些情况下是否需要更新。
    【解决方案2】:

    人们通常使用 flush(),因为他们对 Hibernate 的工作方式感到不舒服。

    如果您需要了解更多信息,请查看http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/

    但有时您需要这样做,特别是当您在与 save() 调用相同的线程中工作时,您需要确保域对象被持久化到数据库中。此外,您域中的一些约束使用数据库来检查数据是否有效。有时需要确保验证有效。这里有一个例子:

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

    所以基本上,如果您现在真的需要数据库中的某些东西,您应该只使用刷新!这比你想象的要少。希望这能有所帮助,而不是在关于冲水的谈话中出现一点厕所幽默……太自豪了:)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2021-01-08
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多