我最近将Grails项目更新到最新的 2.x 版本2.5.0,以及所有依赖项,包括Hibernate,现在为4.3.5.2。
所有主要都有效,即数据库正在编写/检索值,控制器执行它们的操作,Spring安全性工作等等。但是,现在使用withCriteria
的模型查询之一是抛出一个奇怪的错误。
这两个域类看起来像这样:
class MyModel1 {
Integer status
MyModel2 model2
}
class MyModel2 {
Integer range1
Integer range2
}
然后我有这个方法执行查询"范围"子模型的字段:
public List<MyModel1> doThing(int low, int hi) {
return MyModel1.withCriteria {
eq("status", SomeStatus.FLAGGED)
model2 {
between("range1", low, hi)
between("range2", low*2, hi*3)
}
}
}
升级之前,此代码运行正常。现在它抱怨以下例外:
could not resolve property: model2_alias0 of: com.example.MyModel2. Stacktrace follows:
org.hibernate.QueryException: could not resolve property: model2_alias0 of: com.example.MyModel2
at grails.gorm.CriteriaBuilder.invokeMethod(CriteriaBuilder.java:329)
at org.grails.datastore.gorm.GormStaticApi$_withCriteria_closure11.doCall(GormStaticApi.groovy:305)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
at org.grails.datastore.gorm.GormStaticApi.withCriteria(GormStaticApi.groovy:304)
at com.example.MyService.doThing(MyService.groovy:42)
(另外,我使用IntelliJ,当我突出显示上面between()
块中的withCriteria
语句时,IntelliJ告诉我它&#34;无法解析符号&#39;介于&#39;&#34;。也许不相关,IDK。)
答案 0 :(得分:0)
所以看来问题出在我更新的Hibernate版本上。
线索在2.5.0 GORM docs所在的位置:
引擎盖下它使用了Hibernate 3 ......
我试图使用v4,正如我在上面所述。我切换回最新版本3.将以下内容放入 BuildConfig.groovy :
plugins {
runtime ":hibernate:3.6.10.19"
}
还必须在 DataSource.groovy :
中切换此行hibernate {
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // had been this: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
}
之后,一切正常。 (另外,IntelliJ仍然抱怨between
子句,显然,不相关。)