com.sun.proxy.$Proxy25 cannot be cast to SessionImplementor

原创 2016年05月31日 17:00:35
今天在用传统框架ssh时出现了如题的错误,版本是hibernate4.x和struts2.x和spring4.x。之前用hibernate3.x和spring3.x还好好的,代码如下
@Override
public Integer getCount(final DetachedCriteria dc)  throws Exception{
    return getHibernateTemplate().execute(new HibernateCallback(){

            @Override
            public Object doInHibernate(Session session) throws HibernateException {
                return ((Long) dc.getExecutableCriteria(session).uniqueResult()).intValue();
            }
        });
    }

但是运行时报出如下错误

java.lang.ClassCastException: com.sun.proxy.$Proxy25 cannot be cast to org.hibernate.engine.spi.SessionImplementor
    at org.hibernate.criterion.DetachedCriteria.getExecutableCriteria(DetachedCriteria.java:75)
    at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:341)
    at org.springframework.orm.hibernate4.HibernateTemplate.execute(HibernateTemplate.java:296)

网上找了下看到大多数是说要给spring的


<aop:config></aop:config> 改成 
<aop:config proxy-target-class="true"></aop:config>

结果还是报错这个错误,没办法,只好自己找了,看了一下org.springframework.orm.hibernate4.HibernateTemplate源码的两个片段,如下

@Override
    public <T> T execute(HibernateCallback<T> action) throws DataAccessException {
        return doExecute(action, false);
    }
protected <T> T doExecute(HibernateCallback<T> action, boolean enforceNativeSession) throws DataAccessException {
        Assert.notNull(action, "Callback object must not be null");

      //挑出了下面这段其余省略
        **try {
            enableFilters(session);
            Session sessionToExpose =
                    (enforceNativeSession || isExposeNativeSession() ? session : createSessionProxy(session));
            return action.doInHibernate(sessionToExpose);
        }**
发现这个doExcute方法里的一个参数enforceNativeSession
,它会决定是否代理session,导致session强制转换SessionImplementor的时候出错。在execute();这个里面已经将他的值设为了false也就是说这个这个没法解决了吗,当然不是,HibernateTemplate这个模板中还有个方法executeWithNativeSession()我们来看一看它的方法体

public <T> T executeWithNativeSession(HibernateCallback<T> action) {
        return doExecute(action, true);
    }

所以到这问题就已经解决了我们将getHibernateTemplate().execute()换成getHibernateTemplate().executeWithNativeSession()就行了

解决使用数据库时代理类强转出现异常$Proxy0 cannot be cast to java.sql.Connection

在练习数据库连接池时,遇到一个问题,之前同样使用过代理,方式一样都没有问题,代码如下。 final Connection conn = pool.remove(0); //--利用动态...
  • fszeng2011
  • fszeng2011
  • 2015年04月23日 10:43
  • 1692

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE。在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的。【如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知...
  • renfufei
  • renfufei
  • 2015年04月05日 13:39
  • 7678

Android View measure (五) 支持margin属性,从一个异常说起

先来看下代码 一、查看夏目 1. 自定义控件 public class CustomViewGroup extends ViewGroup { ...... @Overri...
  • love_world_
  • love_world_
  • 2015年03月17日 21:25
  • 4300

Spring aop报错:com.sun.proxy.$Proxy cannot be cast to xxx

描述错误 有一个 BaseService 接口 public interface BaseService 2.有一个BaseServiceImpl 实现类 public class B...
  • qq_36324685
  • qq_36324685
  • 2017年03月30日 16:01
  • 284

动态代理异常com.sun.proxy.$Proxy0 cannot be cast to

本人在学习动态代理的时候,做了些练习,结果报出了 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Pro...
  • s3395719
  • s3395719
  • 2017年07月25日 11:57
  • 1137

com.sun.proxy.$Proxy2 cannot be cast to com.vnb.HelloWorldImpl1

com.sun.proxy.$Proxy2 cannot be cast to com.vnb.HelloWorldImpl1
  • m0_37586690
  • m0_37586690
  • 2017年07月19日 17:09
  • 328

com.domain.*_$$_javassist_6 cannot be cast to javassist.util.proxy.Proxy问题

使用Hibernate映射实体时,出现这个错误: 解决方案,在Hibernate包中有一个javassist-3.18.1-GA.jar跟Struts2中的javassist-3.11.0-GA.j...
  • JYH1314
  • JYH1314
  • 2016年04月16日 17:34
  • 1654

java.lang.ClassCastException: $Proxy17 cannot be cast to *.*.*.service.impl.DeviceService

报错: java.lang.ClassCastException: $Proxy17 cannot be cast to *.*.*.service.impl.DeviceService at *...
  • yydcj
  • yydcj
  • 2013年06月07日 11:38
  • 1454

在SSH整合过程中ClassCastException:xxx_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy

java.lang.ClassCastException: com.norman.model.Group_$$_javassist_0 cannot be cast to javassist.util...
  • u013524303
  • u013524303
  • 2015年08月21日 16:43
  • 1723

异常com.google.gson.internal.StringMap cannot be cast to XXX解决方案

02-15 07:20:06.485: E/AndroidRuntime(1766): java.lang.ClassCastException: com.google.gson.internal.S...
  • zml_2015
  • zml_2015
  • 2016年02月15日 16:14
  • 7093
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com.sun.proxy.$Proxy25 cannot be cast to SessionImplementor
举报原因:
原因补充:

(最多只允许输入30个字)