Grails java.lang.IllegalStateException:类[]上的方法在Grails应用程序之外使用

时间:2014-01-29 09:50:27

标签: hibernate grails gorm

Grails版本:2.3.4

Hibernate插件:运行时“:hibernate:3.6.10.6”

Bootstrap.groovy中生成错误的行:

  

def adminRole = new Role(authority:'ROLE_USER')。save(flush:true)

实际上任何类(控制器,Bootstrap.groovy)中的任何保存操作都会导致此错误。

但是当我获得在另一台计算机上创建的域类时,它运行正常,没有错误。

有什么建议吗?

感谢。

完整的堆栈跟踪:

ERROR context.GrailsContextLoader Error initializing the application: Method on class [com.hib.Role] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
java.lang.IllegalStateException: Method on class [com.hib.Role] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
    at BootStrap$_closure1.doCall(BootStrap.groovy:9)
    at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:308)
    at grails.util.Environment.executeForEnvironment(Environment.java:301)
    at grails.util.Environment.executeForCurrentEnvironment(Environment.java:277)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

我不是在使用maven或嘲笑。

Botstrap.groovy

    class BootStrap {

      def init = { servletContext ->

      def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)

   }
            def destroy = {
        }
    }

2 个答案:

答案 0 :(得分:1)

@ user3414639的提示帮助了我。在我的情况下,代码由几个项目组成,这些项目可以引入GORM对象的公共模块。当一个GORM对象上的PostInsert事件触发了另一个要保存的GORM对象(第二个GORM对象被映射到新数据源)时,我看到了这个错误。

将新连接添加到项目的测试部分,项目中的datasource.groovy为我解决了错误。我将继续深入研究配置(不确定为什么GORM对象#1也没有失败),但至少这让我走上正轨。

dataSource {
}
environments {
    test {
        dataSource_missing {
            driverClassName = "com.mysql.jdbc.Driver"
            url = "jdbc:mysql://localhost/testdomain?useUnicode=yes&characterEncoding=UTF-8"
            username = ""
            password = ""
        }
    }
}

答案 1 :(得分:0)

使用Grails 2.3.6和Hibernate 3.6.10.8时出现了类似的错误。在运行集成测试时尝试在GORM对象上执行操作时显示。 最后,我在GORM域类的映射块中设置了一个数据源,当时我还没有在' test'中创建数据源。环境部分'在datasource.groovy中。对它进行排序并且有效。