更新域类和刷新会话?

时间:2013-10-26 19:22:14

标签: hibernate grails spring-mvc grails-2.0 grails-domain-class

我想知道当我对域类中的数据库进行操作时是否必须设置flush:true。例如:

class TreeNode {    

    TreeNode removeFromChildren(TreeNode child) {
       TreeNodeChild.findByNodeAndChild(this, child).delete(flush: true)
       this
    }
    ...
}

或以下是正确的符号?

class TreeNode {    

    TreeNode removeFromChildren(TreeNode child) {
       TreeNodeChild.findByNodeAndChild(this, child).delete()
       this
    }
    ...
}

问题是:我应该刷新会话吗?

1 个答案:

答案 0 :(得分:2)

the docs获取同花顺的定义:

  

如果设置为true,则将刷新持久上下文,从而导致   实例被立即删除。

this related question上还有更多内容。您问题的相关部分是:

  

让Hibernate完成它的工作,并且只在您完成时手动刷新会话   必须,或至少只在一批更新结束时。你应该   只有当你没有看到数据库中的数据时才真正使用它   应该在那里。我知道这有点多么荒谬,但是   需要采取此类行动的情况取决于数据库   实施和其他因素。

也就是说,你可以让这个方法的调用者决定是否需要刷新它:

TreeNode removeFromChildren(TreeNode child, boolean flush = false) {
  TreeNodeChild.findByNodeAndChild(this, child).delete(flush: flush)
  this
}