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" fetch="select" >
<column name="ROLEID" precision="10" scale="0" />
</many-to-one>
<many-to-one name="duty" fetch="select" >
<column name="DUTYID" precision="10" scale="0" />
</many-to-one>
<many-to-one name="department" fetch="select" >
<column name="DEPTID" precision="10" scale="0" />
</many-to-one>
改为:
<many-to-one name="role" fetch="select" lazy="false">
<column name="ROLEID" precision="10" scale="0" />
</many-to-one>
<many-to-one name="duty" fetch="select" lazy="false">
<column name="DUTYID" precision="10" scale="0" />
</many-to-one>
<many-to-one name="department" fetch="select" lazy="false">
<column name="DEPTID" precision="10" scale="0" />
</many-to-one>
即可正常运行.