2

grailsドメインでは、次のように実装されてbeforeDeleteいます

class Shop {
    def beforeDelete() {
        Shop.withNewSession {
            Client.findAllByShop(this)*.shop = null                 
        }    
    }
}

ただし、クライアントショップのnull値はDBに保持されません。

手動セッションフラッシュを追加した場合

class Shop {
    def beforeDelete() {
        Shop.withNewSession { s2->
            Client.findAllByShop(this)*.shop = null         
            s2.flush()  
            s2.clear()
        }
    }
}

それは機能し、クライアントショップの値はデータベースでヌルになります。

これはGrailsのバグですか、それともドキュメントを誤解していますか?withNewSession自動フラッシュを意味しませんか?

4

2 に答える 2

4

ドキュメント(ここbeforeDeleteの例まで少し下にスクロール)は、セッションのフラッシュまたはクリアが必要ないことを示唆しているようです。

Burt Beckwithは、Grailsメーリングリスト(ここのスレッドを参照)で、クロージャーに手動で呼び出すflush()必要clear()がないことも示しています。withNewSession

そうは言っても、 Grails 2.2.1以降を使用したバグレポート(詳細はこちら)があるようです。withNewSession

于 2013-12-13T04:08:54.170 に答える
0

withNewSession新しいHibernateセッションを取得しますが、必ずしもトランザクションではありません。withTransactionの代わりに使用したいようですwithNewSession

于 2012-10-05T18:28:28.140 に答える