Pregunta

La siguiente griales script:

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

falla con la excepción:

  

Error de escritura de la ejecución de importación: org.hibernate.HibernateException: No Session de Hibernate obligado a enhebrar, y la configuración no permite la creación de uno no transaccional aquí

cuando validate () se llama en un objeto de dominio no válido. Me gustaría dar salida a los mensajes de error cuando la validación falla, sin embargo, parece que voy a necesitar para establecer una sesión de hibernación con el fin de hacerlo. Alguien sabe una manera de superar esto?

¿Fue útil?

Solución

Encontrados RunScript.groovy que establece la sesión de hibernación para usted, a continuación, ejecuta los scripts especificados como argumentos. Tuve que cambiar mi fuente de un guión Gant (arriba) para simplemente:

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

Soy capaz de ejecutarlo así:

  

$> griales scripts de secuencias de comandos ejecutada / Import.groovy

Otros consejos

estoy haciendo algo como esto y funciona para mí ...

// 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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top