【问题标题】:Hibernate JPA conflict in Grails 2.4.4Grails 2.4.4 中的 Hibernate JPA 冲突
【发布时间】:2015-01-15 03:15:43
【问题描述】:

由于 Spring Security 与 hibernate4 插件不兼容,我一直在使用 Hibernate 3 将 Grails 1.3.7 应用程序升级到 2.4.4,并且在运行时遇到了这种堆栈跟踪的问题:

java.lang.ClassCastException: com.xxxxxx.grails.domain.WorkflowStepDescription_$$_javassist_1 cannot be cast to javassist.util.proxy.ProxyObject 
at org.codehaus.groovy.grails.orm.hibernate.proxy.GroovyAwareJavassistLazyInitializer.createProxyInstance(GroovyAwareJavassistLazyInitializer.java:107)
at org.codehaus.groovy.grails.orm.hibernate.proxy.GroovyAwareJavassistLazyInitializer.getProxy(GroovyAwareJavassistLazyInitializer.java:134)
at org.codehaus.groovy.grails.orm.hibernate.proxy.GroovyAwareJavassistProxyFactory.getProxy(GroovyAwareJavassistProxyFactory.java:64) 
at org.codehaus.groovy.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister.createProxy(GroovyAwareSingleTableEntityPersister.java:49)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:360) 
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:281) 
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152) 
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090) 
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1038) 
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:630) 
at org.hibernate.type.EntityType.resolve(EntityType.java:438) 
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139) 
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:982) 
at org.hibernate.loader.Loader.doQuery(Loader.java:857) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
at org.hibernate.loader.Loader.doList(Loader.java:2542) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
at org.hibernate.loader.Loader.list(Loader.java:2271) 
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119) 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716) 
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) 

四处搜索表明这是由于与 Javassist 版本冲突,果然,我构建的 JAR 中有两个不同的版本:

hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar

查看 grails 依赖报告,看起来对 2.1 的依赖来自 Grails 本身:

来自 Hibernate 3.6.10.18 的那个:

+--- org.grails.plugins:hibernate:3.6.10.18 | \--- org.hibernate:hibernate-entitymanager:3.6.10.Final | \--- org.hibernate:hibernate-core:3.6.10.Final | \--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final

Grails 2.4.4 中的那个:

+--- org.grails:grails-plugin-datasource:2.4.4 | \--- org.grails:grails-core:2.4.4 | \--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final

我知道 Grails 2.4.4 可以选择使用 Hibernate 3...我可以通过降级数据源插件来避免这种依赖冲突吗?

【问题讨论】:

    标签: hibernate grails jpa datasource javassist


    【解决方案1】:

    好的,这太令人费解了,我怀疑它会帮助其他人,但我解决了它 - 我注意到这个异常只发生在一个特定的域类上。经过大量的试验和错误,我发现这是因为该类有一个名为“handler”的属性,我只能假设它与更高版本的 javassist 中的方法冲突。我将其更改为“actionHandler”,错误消失了。

    这两个 JAR 版本无疑仍然是一个问题,但它们在这个问题上是一个红鲱鱼。检查您的域类属性名称是否有任何可疑之处!

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 2012-05-30
      • 1970-01-01
      • 2015-09-12
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多