org.hibernate.PropertyAccessException: exception setting property value with CGLIB (sethibernate.cglib.use_reflection_optimizer=

grape927 2008-10-14 04:10:18
<id name="mrid" type="java.lang.Integer">
<column name="mrid" />
<generator class="native" />
</id>
<property name="mname" type="java.lang.String">
<column name="mname" />
</property>
<property name="mdesc" type="java.lang.String">
<column name="mdesc" length="65535" />
</property>
<property name="mphoto" type="java.lang.String">
<column name="mphoto" />
</property>
<property name="muser" type="java.lang.String">
<column name="muser" length="50" />
</property>
<property name="mdate" type="java.util.Date">
<column name="mdate" length="19" />
</property>
<property name="mdelete" type="java.lang.Short">
<column name="mdelete" />
</property>
<many-to-one name="others" column="mrid" class="com.ysglobal.empolder.pojo.Others"
lazy="false" cascade="all" outer-join="true" insert="false" update="false">
</many-to-one>
<id name="oid" type="java.lang.Integer">
<column name="oid" />
<generator class="native" />
</id>
<property name="mrid" type="java.lang.Integer">
<column name="mrid" />
</property>
<property name="oname" type="java.lang.String">
<column name="oname" length="100" />
</property>
<property name="odesc" type="java.lang.String">
<column name="odesc" length="65535" />
</property>
<property name="ouser" type="java.lang.String">
<column name="ouser" length="50" />
</property>
<property name="oupload" type="java.lang.String">
<column name="oupload" />
</property>
<property name="otype" type="java.lang.String">
<column name="otype" length="50" />
</property>
<property name="odot" type="java.lang.Integer">
<column name="odot" />
</property>
<property name="odate" type="java.util.Date">
<column name="odate" length="19" />
</property>
<property name="odelete" type="java.lang.Short">
<column name="odelete" />
</property>
<property name="odemo" type="java.lang.String">
<column name="odemo" />
</property>
<set name="material" inverse="true">
<key column="mrid" />
<one-to-many class="com.ysglobal.empolder.pojo.Material" />
</set>

org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.ysglobal.empolder.pojo.Material.setOthers
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:215)
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:185)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3232)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.ysglobal.webframe.dao.AbstractBaseDao.pagedQuery(AbstractBaseDao.java:375)
at com.ysglobal.empolder.material.manager.MaterialManager.selectMaterial(MaterialManager.java:75)
at com.ysglobal.empolder.material.web.action.MaterialAction.listMaterialPage(MaterialAction.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.ysglobal.webframe.web.filter.OpenHibernateSessionFilter.doFilter(OpenHibernateSessionFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.ysglobal.webframe.web.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:47)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
Caused by: net.sf.cglib.beans.BulkBeanException: com.ysglobal.empolder.pojo.Others cannot be cast to java.util.Set
at com.ysglobal.empolder.pojo.Material$$BulkBeanByCGLIB$$180c87f0.setPropertyValues(<generated>)
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:212)
... 49 more
Caused by: java.lang.ClassCastException: com.ysglobal.empolder.pojo.Others cannot be cast to java.util.Set
... 51 more
...全文
1091 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjc_love 2009-02-14
  • 打赏
  • 举报
回复
问题很简单:Caused by: java.lang.ClassCastException: com.ysglobal.empolder.pojo.Others cannot be
cast to java.util.Set

就是你在bean中定义了 set类型的others属性
而在配置文件中 却使用了一个Others对象

或者相反,没有bean,只是根据错误原因猜测的
  • 打赏
  • 举报
回复
希望楼主能把问题说的更清楚点

什么情况下出现的这种错误

那样会更好分析一点
zhangxztarena 2009-02-13
  • 打赏
  • 举报
回复
我也遇到了同样的情况,后来查询CGLIB的文档和HIBERNATE的文档才知道原因:
因为我的user对象里面有一个集合属性HashSet cards = new HashSet();
当我保存对象的时候出现问题,后来改成Set cards = new HashSet()就可以了,原因是hibernate通过cglib生成代理集合对象,但是这个集合代理对象实现了set接口,当hibernate调用user的setCards(HashSet cards)的时候由于代理对象不能向下转型所以就会出现这样的异常,如果改成Set cards = new HashSet()这个时侯user的cards属性的set方法更改为setCards(Set cards)这样的情况下cglib生成的代理对象就可以转型并且通过反射注入对象。

纯属个人意见,有问题大家可以多多指教。。。
以梦为马 2008-10-19
  • 打赏
  • 举报
回复
回帖是一种美德!
顶顶。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧