升级Grails withCriteria查询后,查询不再有效

时间:2015-05-16 21:40:22

标签: grails gorm

我最近将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。)

1 个答案:

答案 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子句,显然,相关。)