2013-10-26 111 views
0

我想知道是否必須設置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 
    } 
    ... 
} 

問題是:我應該刷新會話嗎?

回答

2

以平齊的定義從the docs

如果設置爲true的持久性上下文將被刷新導致 情況下被立即刪除。

還有更多關於SO的this related question。相關的部分,你的問題是:

讓Hibernate做的工作,只有手動刷新會話時 有,或者至少只在批量更新的結束。如果您在 應該在那裏時沒有看到數據庫中的數據,您應該只使用 。我知道這有點不好意思,但是當這種行爲是必要的情況下取決於數據庫 的實施和其他因素。

這就是說,你可以讓這個方法的調用者決定是否需要被刷新:

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