溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請(qǐng)您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請(qǐng)您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
           

          Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB異常分析及處理

          異常信息:

          Exception in thread "main" org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.dl.bean.Employee.setDepartment

              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.dl.test.EmployeeTest.main(EmployeeTest.java:26)

          Caused by: net.sf.cglib.beans.BulkBeanException: com.dl.bean.Employee cannot be cast to com.dl.bean.Department

              at com.dl.bean.Employee$$BulkBeanByCGLIB$$a415f505.setPropertyValues(<generated>)

              at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:212)

              ... 15 more

          Caused by: java.lang.ClassCastException: com.dl.bean.Employee cannot be cast to com.dl.bean.Department

              ... 17 more

          遇此異常很老火,當(dāng)然第一件事就是在googlebaidu一把看能解決吧!

          googlebaidu結(jié)果如下:

          查詢結(jié)果中包含null的值,對(duì)于一些數(shù)字或boolean包含null,定義該項(xiàng)時(shí)必須使用wrapper類型,而不能是primitive類型,例如使用Integer而不能是int,Boolean而不能是boolean否則會(huì)拋出exception

          結(jié)論是:對(duì)于屬性在set/get時(shí),屬性值為null而出現(xiàn)該異常

          我對(duì)此種說法不敢茍同,既然google上有這種說法相比就有它存在的道理。

          從上述語句中我們得出結(jié)論:在寫pojo類時(shí)最好選用包裝類而不使用java中的基本數(shù)據(jù)類型,以免產(chǎn)生一些莫名其妙的錯(cuò)誤(建議使用5.0以上的jdk版本)大家一直認(rèn)為java是面向?qū)ο蟮恼Z言,這句話在jdk1.4以前是有分歧的,大家都知道java8個(gè)基本數(shù)據(jù)類型不是對(duì)象,所以這么說還不夠嚴(yán)謹(jǐn),直到jdk5.0的誕生,這句話才勉強(qiáng)成立。我想這也是sun公為什么極力推薦使用包裝類的緣故。

          看來還得自己分析這個(gè)異常,那么首先從映射文件及pojo類來下手

          Java代碼:

          publicclass Employee {

              private Integer id;

              private String empname;

              private Integer empage;

              private String context;

              private Integer deptid;

              private Department department=new Department();

               //省略set()get()方法

          }

          <hibernate-mapping package="com.dl.bean">

              <class name="Employee" table="employee">

                   <id name="id" >

                       <generator class="native"/>

                   </id>

                   <property name="empname"/>

                   <property name="empage"/>

                   <property name="context" />

                   <property name="deptid" insert="false" update="false"/>

                   <many-to-one name="department" column="deptid" cascade="all" class="Employee" /> //此處為錯(cuò)誤的根源,這個(gè)錯(cuò)誤很隱蔽,不仔細(xì)檢查很難發(fā)現(xiàn)

              </class>

              </hibernate-mapping>

          不知道至此大家發(fā)現(xiàn)錯(cuò)誤了沒,經(jīng)過本人仔細(xì)檢查以及分析以上pojo類及映射文件,發(fā)現(xiàn)在<many-to-one>標(biāo)簽中class屬性配置出錯(cuò)了,正確的配置應(yīng)為:

          <many-to-one name="department" column="deptid" cascade="all" class="Department" />,到此問題徹底解決了,沒什么技術(shù)含量,只是記下來,防止更多人走冤枉路

          posted on 2009-11-25 17:56 雪山飛鵠 閱讀(6416) 評(píng)論(4)  編輯  收藏 所屬分類: Hibernate

          Feedback

          # re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB異常分析及處理 2009-11-25 18:55 天堂露珠
          遇到過class屬性配置錯(cuò)的,但提示的錯(cuò)誤不是這樣的。  回復(fù)  更多評(píng)論
            

          # re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB異常分析及處理 2009-11-26 09:12 雪山飛鵠
          @天堂露珠
          還記得你的錯(cuò)誤嗎?將你的錯(cuò)誤發(fā)上來,大家一塊研究研究~  回復(fù)  更多評(píng)論
            

          # re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB異常分析及處理 2009-12-12 17:20 興華
          祖國上下就需要你這樣的精神。  回復(fù)  更多評(píng)論
            

          # re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB異常分析及處理 2011-12-07 15:40 lp
          感謝LZ,問題解決的很好!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 浮梁县| 三河市| 肃南| 佛教| 南宁市| 临泉县| 资阳市| 什邡市| 平遥县| 朝阳县| 岳池县| 赫章县| 阜城县| 普陀区| 上栗县| 河南省| 衡阳市| 田林县| 西乡县| 凤冈县| 福贡县| 怀远县| 克什克腾旗| 高雄县| 科技| 贞丰县| 南汇区| 赤城县| 昌都县| 赫章县| 晋州市| 凤冈县| 静安区| 康马县| 沙河市| 青岛市| 叶城县| 昌乐县| 兴宁市| 韶关市| 化州市|