【问题标题】:Javassist ClassCastException in Hibernate and NetbeansHibernate 和 Netbeans 中的 Javassist ClassCastException
【发布时间】:2014-04-24 18:19:19
【问题描述】:

有人可以帮我调查一下吗,是什么导致了这个应用程序产生了这个错误。我正在关注使用Hibernate in Netbeans 的本教程。到达“from Film”这一行后,根据教程执行测试以读取 Film 表的记录,但结果是以下错误。我用谷歌搜索要做什么,到目前为止我所看到的只是据报道 javassist jar 文件可能存在于不同的目录中。一个,在 Hibernate (Hibernate 4.x-javassist-3.15.0.GA) 目录中,我发现这是真的,另一个在 glassfish (Glassfish Server 4) 目录中。我尝试在 glassfish lib 目录中搜索它,似乎不存在这样的东西。

java.lang.ClassCastException: dvdstore.Language_$$_javassist_4 cannot be cast to javassist.util.proxy.ProxyObject
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:147)
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:71)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:631)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3737)
    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.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:940)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)

项目的 jar 列表。

【问题讨论】:

  • 您是否正在使用 Maven 构建您的项目?你能在你的项目上做一个dependency:tree 并粘贴输出吗?您很可能使用了与 Hibernate 不兼容的 太新 版本的 javassist。
  • 不,我没有使用 Maven,只是一个 Web 项目。我已经编辑了项目以添加我正在使用的 jar 文件列表。谢谢。非常感谢。

标签: hibernate glassfish classcastexception javassist netbeans-8


【解决方案1】:

您使用的 javassist 版本太旧。对于 Hibernate 4,您需要 newer than 3.16 的 javassist 版本。 this related question 中讨论了相同的问题。考虑使用 Maven 或 Gradle 等构建工具来构建您的项目。这些工具会为您解决传递依赖关系,这样您就可以避免此类版本冲突。

【讨论】:

  • 非常感谢。我认为这应该可以解开谜团。欣赏。我会将项目转换为 Maven 项目,看看它是否提供了更好的性能。
  • 嘿,Maven 入门很复杂,但从长远来看,值得付出努力。就个人而言,我更喜欢 Gradle。如果您的问题得到解答,请考虑将此问题标记为已解决。谢谢!
  • 好的。 gradle 是否实现了与 Maven 相同的依赖管理?我会试一试。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多