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 = {
}
}
答案 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中。对它进行排序并且有效。