我想知道当我对域类中的数据库进行操作时是否必须设置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
}
...
}
问题是:我应该刷新会话吗?
答案 0 :(得分:2)
从the docs获取同花顺的定义:
如果设置为true,则将刷新持久上下文,从而导致 实例被立即删除。
在this related question上还有更多内容。您问题的相关部分是:
让Hibernate完成它的工作,并且只在您完成时手动刷新会话 必须,或至少只在一批更新结束时。你应该 只有当你没有看到数据库中的数据时才真正使用它 应该在那里。我知道这有点多么荒谬,但是 需要采取此类行动的情况取决于数据库 实施和其他因素。
也就是说,你可以让这个方法的调用者决定是否需要刷新它:
TreeNode removeFromChildren(TreeNode child, boolean flush = false) {
TreeNodeChild.findByNodeAndChild(this, child).delete(flush: flush)
this
}