好的,所以我最近开始学习hibernate,我得到了Netbeans 8.0,并开始学习官方的Netbeans hibernate教程:https://netbeans.org/kb/docs/web/hibernate-webapp.html
然而,当我到达测试我的HQL("来自电影"——我运行的查询)的地方时,我得到了这个错误:
java.lang.ClassCastException: dvdrental.Language_$$_javassist_60 cannot be cast to javassist.util.proxy.ProxyObject
还有很多其他东西遵循这条线,但这不是我要做的。
我使用的hibernate库是Netbeans 8.0附带的。所以我上网,得到了官方的Hibernate 4.3.6。我在我的netbeans上配置了它,使用了它,却得到了同样的错误。
然后我删除了javassist-3.18.1-GA.jar,错误就消失了。我能够毫无问题地运行我的HQL。与删除我的netbeans附带的javassist-3.15.0-GA.jar相同,它解决了我所有的问题。
这就引出了我的问题:这应该发生吗?javassist-3.18.1-GA.jar在必需的文件夹中。为什么我在使用它时会出错,而在省略它时却不会出错?
为什么我一开始就犯了这个错误?
完整错误如下。谢谢你们的帮助,伙计们。
java.lang.ClassCastException: dvdrental.Language_$$_javassist_60 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)
好的,所以我终于找到了这个问题的解决方案。显然,Netbeans 8.0出现了一个错误。在与Oracle联系后,发布了更新-Netbeans 8.0.1,它几乎解决了所有这些问题。所以,换句话说,问题与hibernate无关,而是与Netbeans有关。
因此,如果您使用的是Netbeans 8.0,请确保更新IDE。
谢谢。