質問

次のGrailsスクリプトます:

// Import.groovy

includeTargets << grailsScript("Bootstrap")

target(main: "Import some data...") {
    depends(bootstrap)

    def Channel = grailsApp.classLoader.loadClass("content.Channel")

    def c 

    // works: saving a valid Channel succeeds
    c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()

    // doesn't work: saving an invalid Channel fails with exception
    c = Channel.newInstance().validate()

    // this line is never reached due to exception
    println(c.errors)

}

setDefaultTarget(main) 

例外で失敗します:

  

エラー実行中のスクリプトのインポート:org.hibernate.HibernateException:いいえHibernateのSessionはスレッドにバインド、およびコンフィギュレーションは、ここで非トランザクション1を作成することはできません。

検証()が無効なドメインオブジェクトで呼び出されたとき。検証が失敗したときに、私は、しかし、私がそうするために、Hibernateのセッションを確立する必要がありますそうです、出力エラーメッセージをしたいと思います。誰もがこの乗り越えるための方法を知っていますか?

役に立ちましたか?

解決

が見つかり<のhref = "http://naleid.com/blog/2008/03/31/using-gant-to-execute-a-groovy-script-within-the-grails-context-updated/"あなたのためのHibernateセッションをセットアップするのrel =「nofollowをnoreferrer」> RunScript.groovy のは、あなたが引数として指定したスクリプトを実行します。私は単純に(上記)ガントスクリプトからの私のソースを変更する必要がありました。

// Import.groovy

def Channel = grailsApp.classLoader.loadClass("content.Channel")

def c 
c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()
c = Channel.newInstance().validate()
println(c.errors)

私はそうのようにそれを実行することができるよ。

  

$> Grailsの実行スクリプトのスクリプト/ Import.groovy

他のヒント

私はこのような何かをやっているし、それは私の作品...

// Import.groovy

includeTargets << grailsScript("Bootstrap")

target(main: "Import some data...") {
    depends(bootstrap)

    // added this ------------------------------------------------------
    def sessionFactory = appCtx.getBean("sessionFactory")
    def session = SessionFactoryUtils.getSession(sessionFactory, true)
    TransactionSynchronizationManager.bindResource(
        sessionFactory, new SessionHolder(session))
    // added this ------------------------------------------------------

    def Channel = grailsApp.classLoader.loadClass("content.Channel")

    def c 

    // works: saving a valid Channel succeeds
    c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()

    // doesn't work: saving an invalid Channel fails with exception
    c = Channel.newInstance().validate()

    // this line is never reached due to exception
    println(c.errors)

}

setDefaultTarget(main)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top