欢迎使用CSDN-markdown编辑器

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包就好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值