1

Grails アプリケーションを構築していますが、MongoDB GORM プラグインから Hibernate プラグインに切り替えると、統合テストで奇妙な結果が得られます。

1 対多の関係にある Client クラスと Workspace クラスがあります。

class Client{
    //fields...
    static hasMany = [workspaces: Workspace]
}

class Workspace{
    //fields...
    static belongsTo = [client: Client]
}

次に、次の Spock 統合テストを実行すると:

def "Deleting a client removes its related workspaces" () {

    given: "An existing client and workspace"
    Client client =  new Client().save(failOnError: true)
    Workspace workspace = new Workspace().save(failOnError: true)
    client.addToWorkspaces(workspace)

    when: "Deleting the client"
    def foundClient = Client.get(client.id)
    foundClient.delete(flush: true)
    assert !Client.exists(client.id)

    then: "Related workspace is also deleted"
    !Workspace.exists(workspace.id)
}

このテストは、Hibernate ではパスしますが、MongoDB の実行ではパスしません。MongoDB はワークスペースを削除せず、テストの最後の行は次のように失敗します。

Workspace.count() == 0
          |       |
          1       false

MongoDB が GORM を使用して Hibernate と同じカスケード操作を実行する方法はありますか?

ご協力いただきありがとうございます

4

1 に答える 1

0

GORM でインターセプターを使用して、beforeDelete探している効果を得ることができると思います。何かのようなもの:

def beforeDelete() {
    Workspace.withNewSession { 
        def ws = Workspace.findByClient(id)
        if (ws) {
            ws.delete(flush:true)
        }
    }
}
于 2013-07-06T03:00:57.340 に答える