2009-03-23 10 views
4

次のGrailsスクリプトをHibernateセッションを確立する方法:のGrailsスクリプト内

エラー実行中のスクリプトのインポート:org.hibernate.HibernateException:いいえHibernateのSession

// 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) 

は例外で失敗スレッドにバインドされており、コンフィグレーションで非トランザクション型のものを作成することはできません。

無効なドメインでvalidate()が呼び出された場合obj ect。検証が失敗したときにエラーメッセージを出力したいのですが、そうするために休止状態のセッションを確立する必要があるようです。誰もがこれを乗り越える方法を知っていますか?

答えて

3

見つかった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

0

私はこのようなdointなものだし、それが私の作品...

// 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) 
関連する問題