此错误的先前问题是指hibernate版本问题或运行测试。我认为这不是这种情况。
在Grails服务课程中,我有:
private static User anon = User.findByUsername('anonymous')
这就是创建错误:
Caused by IllegalStateException: Method on class [User] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
我正在尝试使用存储在数据库中的对象来实例化私有静态属性,但我必须做一些非常错误的事情。感谢您提供任何帮助,建议和指示。
答案 0 :(得分:8)
这个static
无法工作,因为这会在加载服务类时尝试进行findByUsername
调用,在GrailsApplication
初始化过程完成之前。最早可以可靠地调用GORM方法的时间是BootStrap
,所以我倾向于在这些情况下做的是在服务上创建一个初始化方法,然后从BootStrap
init闭包中调用该方法
答案 1 :(得分:2)
我知道这是旧的,但是,你使用的是哪个版本的grails?从grails 2.3迁移到grails 2.5后,我遇到了同样的问题。
经过一些非常痛苦的调查后,我发现问题是在使用新的fork模式属性运行测试时,并且通过从BuildConfig.groovy中删除这些选项很容易解决:
grails.project.fork = [
// configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
//compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
// configure settings for the test-app JVM, uses the daemon by default
test: false,
// configure settings for the run-app JVM
run: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false],
// configure settings for the run-war JVM
war: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false],
// configure settings for the Console UI JVM
console: [maxMemory: 1536, minMemory: 64, debug: false, maxPerm: 1024]
]
问候。