当前位置: 代码迷 >> Web前端 >> WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常4
  详细解决方案

WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常4

热度:584   发布时间:2012-10-25 10:58:57.0
WebWork.Spring.Hibernate整合开发网络书城----学习遇到的错误4
hibernate中at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)异常的解决方法
今天写webwork+spring+hibernate的时候碰到了这个问题

java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)这个问题出得很莫名其妙,我在用find方法找数据的时候,如果数据库中不存在这条记录,那么代码一切正常,但如果存在相应记录就会抛出上面的异常,搜了一圈,首先在国外的网站上找到一个方法
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1365?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel
主要说的是问题出在CGLib上面,修正一下就可以了,下载中也给出了patch,我没有试过,
我看到了最后一条评论,直接更新CGlib到2.2beta就可以了。我试了一下,问题解决了。
在搜索过程中,JavaEye有个帖子也提到了这个问题,解决办法除了上面那个,还有人说可以
设置相关表的lazy="false"解决问题,我没有尝试过,大家可以看看,各取所需。
在查询Department,Duty,Role时均正常.查询Userinfo时,报

java.lang.NullPointerException
org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)

在网上搜索答案时,给出的解决方案是:

1.导入cglib-2.2并替换掉cglib-2.13

2.将其关联的对象设置成lazy="false"

我采用的是第二种:即将  <many-to-one name="role" class="com.oaweb.bo.Role" fetch="select" >
            <column name="ROLEID" precision="10" scale="0" />
        </many-to-one>
        <many-to-one name="duty" class="com.oaweb.bo.Duty" fetch="select" >
            <column name="DUTYID" precision="10" scale="0" />
        </many-to-one>
        <many-to-one name="department" class="com.oaweb.bo.Department" fetch="select" >
            <column name="DEPTID" precision="10" scale="0" />
        </many-to-one>

改为:

  <many-to-one name="role" class="com.oaweb.bo.Role" fetch="select" lazy="false">
            <column name="ROLEID" precision="10" scale="0" />
        </many-to-one>
        <many-to-one name="duty" class="com.oaweb.bo.Duty" fetch="select" lazy="false">
            <column name="DUTYID" precision="10" scale="0" />
        </many-to-one>
        <many-to-one name="department" class="com.oaweb.bo.Department" fetch="select" lazy="false">
            <column name="DEPTID" precision="10" scale="0" />
        </many-to-one>

即可正常运行.
  相关解决方案