Frage

Das folgende grails Skript:

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

nicht mit der Ausnahme:

  

Fehler beim Ausführen von Skript Import: org.hibernate.HibernateException: Nein Hibernate Session einzuzufädeln gebunden und Konfiguration Erstellung von nicht-transaktions einer hier nicht erlauben

, wenn validate () auf einem ungültigen Domain-Objekt aufgerufen. Ich möchte die Fehlermeldungen ausgegeben werden, wenn die Validierung fehlschlägt, aber es scheint, ich brauche eine Hibernate-Sitzung einzurichten, um dies zu tun. Jeder, der einen Weg kennen zu lernen Vergangenheit das?

War es hilfreich?

Lösung

Gefunden RunScript.groovy die die Hibernate-Session für Sie einrichtet, dann die Skripte, die Sie als Argument angeben. Ich musste meine Quelle von einem Gant Skript ändern (siehe oben) zu einfach:

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

Ich bin in der Lage es wie so läuft:

  

$> Grails run-Skript scripts / Import.groovy

Andere Tipps

ich so etwas wie dies tue und es funktioniert für mich ...

// 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top