当我将项目升级到grails 2.0(全新安装的可搜索插件)时,我得到了一个Hibernate类转换异常。有没有人遇到这个问题?
答案 0 :(得分:2)
http://grails.org/使用Searchable插件,它适用于Grails 2.0.3。你遇到了什么问题?
答案 1 :(得分:1)
可搜索基于Compass,正在重写为ElasticSearch。
ElasticSearch插件适用于Grails 2.0。
有关详细信息,请参阅The Future of Compass & ElasticSearch。
答案 2 :(得分:1)
将我的应用程序从Grails 1.3.7迁移到2.1.1遇到了类似的问题。我能够通过将Searchable插件从0.5.5更新到0.6.4来解决它。
这是堆栈跟踪的样子:
| Error 2012-10-05 19:02:18,691 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error executing bootstraps: org.codehaus.groovy.grails.orm.hibernate.SessionFactoryProxy cannot be cast to org.hibernate.impl.SessionFactoryImpl
Message: org.codehaus.groovy.grails.orm.hibernate.SessionFactoryProxy cannot be cast to org.hibernate.impl.SessionFactoryImpl
Line
| Method
->> 95 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 46 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityCollectionLifecycleInjector
| 149 | doStart . . . . in org.compass.gps.device.hibernate.HibernateGpsDevice
| 125 | start in org.compass.gps.device.AbstractGpsDevice
| 73 | start . . . . . in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 166 | start in org.compass.gps.impl.AbstractCompassGps
| 144 | doCall . . . . in SearchableGrailsPlugin$_closure3
| 303 | innerRun in java.util.concurrent.FutureTask$Sync
| 138 | run . . . . . . in java.util.concurrent.FutureTask
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run . . . . . . in ''
^ 680 | run in java.lang.Thread
| Error 2012-10-05 19:02:18,715 [localhost-startStop-1] ERROR [localhost].[/myApp] - Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
Message: Error executing bootstraps; nested exception is java.lang.ClassCastException: org.codehaus.groovy.grails.orm.hibernate.SessionFactoryProxy cannot be cast to org.hibernate.impl.SessionFactoryImpl
Line | Method
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 138 | run in java.util.concurrent.FutureTask
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run in ''
^ 680 | run . . in java.lang.Thread
Caused by ClassCastException: org.codehaus.groovy.grails.orm.hibernate.SessionFactoryProxy cannot be cast to org.hibernate.impl.SessionFactoryImpl
->> 95 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 46 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityCollectionLifecycleInjector
| 149 | doStart in org.compass.gps.device.hibernate.HibernateGpsDevice
| 125 | start in org.compass.gps.device.AbstractGpsDevice
| 73 | start . in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 166 | start in org.compass.gps.impl.AbstractCompassGps
| 144 | doCall . in SearchableGrailsPlugin$_closure3
| 303 | innerRun in java.util.concurrent.FutureTask$Sync
| 138 | run . . in java.util.concurrent.FutureTask
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run . . in ''
^ 680 | run in java.lang.Thread
答案 3 :(得分:0)
是的,我也可以在grails 1.3.7,2.0.3上使用,也可以在2.1.1上使用
我所要做的就是将我的可搜索插件升级到最新版本。虽然我不得不在代码中进行一些调整,但插件文档中提到了所有内容
注意控制器中的导入。我猜这个类路径已经改变了。这是我做的唯一改变。
答案 4 :(得分:0)
这种情况发生的原因是当您升级到使用Hibernate 4.X的Grails版本时。 之所以发生这种情况,是因为Hiberate 3.x和4.x之间有多个包名和类名更改,因此与Hibernate 3.x一起使用的代码除了极少数情况外不会使用4.x。除了名称更改之外,事物的工作方式也发生了很大的内部变化,因此编译的代码必然会运行。应用程序选项#1将降级为Hibernate 3.x.其中的配置设置包含并注释掉(BuildConfig.groovy,DataSource.groovy),因此这是一个非常快速的选项。如果你依赖于4.x中添加的功能,显然不是一个选项,这只会延迟真正的问题,直到你必须升级Hibernate。