hibernate - 如何在 grails 脚本中建立 Hibernate session

标签 hibernate grails groovy gant

以下 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) 

失败,但异常:

Error executing script Import: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here



当在无效域对象上调用 validate() 时。我想在验证失败时输出错误消息,但似乎我需要建立一个 hibernate session 才能这样做。任何人都知道一种方法来克服这个?

最佳答案

找到 RunScript.groovy它为您设置 hibernate session ,然后运行您指定为参数的脚本。我不得不将我的源代码从 Gant 脚本(上图)改为:

// 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 run-script scripts/Import.groovy

关于hibernate - 如何在 grails 脚本中建立 Hibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675514/

相关文章:

java - @OneToMany 删除 child

mysql - Grails配置Mysql数据库报错

Linux - 命名管道 - 丢失数据

jenkins - 并行任务日志困惑

java - Hibernate 搜索自定义停用词列表

java - Hibernate Criteria 使用 FetchType.EAGER 多次返回子级

java - J2SE JPA 持久性行为

grails - 使用grails事件推送插件不会发生websocket连接

grails - 我应该在域类中实现equals和hashCode吗?

performance - Groovy:优化代码以查找重复元素