温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

BlogJava 首页 新随笔 联系 聚合 管理
  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

遇此异常很老火,当然第一件事就是在googlebaidu一把看能解决吧!

googlebaidu结果如下:

查询结果中包含null的值,对于一些数字或boolean包含null,定义该项时必须使用wrapper类型,而不能是primitive类型,例如使用Integer而不能是int,Boolean而不能是boolean否则会抛出exception

结论是:对于属性在set/get,属性值为null而出现该异常

我对此种说法不敢苟同,既然google上有这种说法相比就有它存在的道理。

从上述语句中我们得出结论:在写pojo类时最好选用包装类而不使用java中的基本数据类型,以免产生一些莫名其妙的错误(建议使用5.0以上的jdk版本)大家一直认为java是面向对象的语言,这句话在jdk1.4以前是有分歧的,大家都知道java8个基本数据类型不是对象,所以这么说还不够严谨,直到jdk5.0的诞生,这句话才勉强成立。我想这也是sun公为什么极力推荐使用包装类的缘故。

看来还得自己分析这个异常,那么首先从映射文件及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" /> //此处为错误的根源,这个错误很隐蔽,不仔细检查很难发现

    </class>

    </hibernate-mapping>

不知道至此大家发现错误了没,经过本人仔细检查以及分析以上pojo类及映射文件,发现在<many-to-one>标签中class属性配置出错了,正确的配置应为:

<many-to-one name="department" column="deptid" cascade="all" class="Department" />,到此问题彻底解决了,没什么技术含量,只是记下来,防止更多人走冤枉路

posted on 2009-11-25 17:56 雪山飞鹄 阅读(6396) 评论(4)  编辑  收藏 所属分类: Hibernate

Feedback

# re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB异常分析及处理 2009-11-25 18:55 天堂露珠
遇到过class属性配置错的,但提示的错误不是这样的。  回复  更多评论
  

# re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB异常分析及处理 2009-11-26 09:12 雪山飞鹄
@天堂露珠
还记得你的错误吗?将你的错误发上来,大家一块研究研究~  回复  更多评论
  

# re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB异常分析及处理 2009-12-12 17:20 兴华
祖国上下就需要你这样的精神。  回复  更多评论
  

# re: Hibernate org.hibernate.PropertyAccessException: exception setting property value with CGLIB异常分析及处理 2011-12-07 15:40 lp
感谢LZ,问题解决的很好!  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: