Maven项目下的Person_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy异常,解决方案
这里是打印出的异常信息:
java.lang.ClassCastException: cn.s2sh.integration.domain.Person_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
出现这个异常,一般是两方面的原因:
1.懒加载
a. hibernate懒加载异常,load方法是使用懒加载的所以在页面获取对象的时候,sessionFactory已经关闭了,要配置一个过滤器解决问题
在web.xml中配置,一定要配置在struts2的过滤器前面
配置在前面当org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter执行完后页面就会出来,页面加载完后sessionFactory关闭(执行strus2过滤器中finally方法),这时候取数据就会懒加载异常,配置后session的结束时间就会延长
<!-- spring用于解决懒加载问题的过滤器 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
b. 还是hibernate懒加载异常,你可能在相应的实体类的属性中配置了懒加载模式LAZY,把它改成立即加载即可。或者在实体的xml映射配置中有这么一段:
<many-to-one name="usersByUserid" class="com.xxx.xx.pojo.Users">
<column name="userid" not-null="true"/>
</many-to-one>
把它改成:
<many-to-one name="usersByUserid" class="com.xxx.xx.pojo.Users" lazy="false">
<column name="userid" not-null="true"/>
</many-to-one>
显式写上lazy属性值为false
2.如果配置完后还没有解决
- 那么就是包冲突了hibernate和strus都有javassist-XX.jar这个包只需要导入一个就可以了,不能去除hibernate的,去除Struts的javassist.jar的依赖
- 如果你是用maven添加的依赖,如下操作,去除Struts关联的javassist依赖:
- -
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.16.3</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
如果是jar包方式,直接去除这个jar包就好了