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()就行了

相关文章推荐

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

描述错误 有一个 BaseService 接口 public interface BaseService 2.有一个BaseServiceImpl 实现类 public class B...

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

本人在学习动态代理的时候,做了些练习,结果报出了 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Pro...

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

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

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
  • 1500

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
  • 1384

在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...

异常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...

java.lang.ClassCastException: com.bumptech.glide.request.target.SquaringDrawable cannot be cast to a

Glide 图片加载报错:java.lang.ClassCastException: com.bumptech.glide.request.target.SquaringDrawable cannot...
  • onceing
  • onceing
  • 2017年06月15日 10:57
  • 753

com.google.gson.internal.LinkedTreeMap cannot be cast to List1.class

在使用Gson解析json时,我定义了三个entity:1、Root.class; public Root(String reason, Result result, int error_code)...

解决FastJson com.alibaba.fastjson.JSONObject cannot be cast to的问题

FastJson的pom依赖: com.alibaba fastjson 1.2.33 听闻FastJson使用特别的算法,速度非常快,甚至快过Google的protobuf,...
  • jeffleo
  • jeffleo
  • 2017年06月22日 23:52
  • 5437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com.sun.proxy.$Proxy25 cannot be cast to SessionImplementor
举报原因:
原因补充:

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