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
    }
    ...
}

問題は、セッションをフラッシュする必要があるかどうかです。

4

1 に答える 1

2

docsからフラッシュの定義を取得します:

true に設定すると、永続コンテキストがフラッシュされ、インスタンスがすぐに削除されます。

SOに関するこの関連する質問には、さらに多くのことがあります。あなたの質問に関連する部分は次のとおりです。

Hibernate にその仕事を任せて、必要な場合、または少なくとも更新のバッチの最後にのみ手動でセッションをフラッシュします。データベースにあるはずのデータが表示されない場合にのみ、実際に使用する必要があります。それが少し希望に満ちたものであることは承知していますが、そのようなアクションが必要になる状況は、データベースの実装やその他の要因によって異なります。

つまり、このメソッドの呼び出し元に、フラッシュする必要があるかどうかを決定させることができます。

TreeNode removeFromChildren(TreeNode child, boolean flush = false) {
  TreeNodeChild.findByNodeAndChild(this, child).delete(flush: flush)
  this
}
于 2013-10-26T20:25:37.047 に答える