问题描述
今天在开发的时候,在数据量小的情况查询时正常,但是上到生产环境,查询量大的时候,时不时的就会抛出下面的异常。有没有大神帮忙解答一下~~mybatis的版本是3.1.1,用spring整合的。org.apache.ibatis.exceptions.PersistenceException:
解决方案二:
Errorqueryingdatabase.Cause:java.lang.ClassCastException:org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.List
解决方案三:
Theerrormayexistinclasspathresource[mybatis/ConVideoInfoMapper.xml]
解决方案四:
Theerrormayinvolvecom.letv.mms.core.dao.IConVideoInfoDao.selectById
解决方案五:
Theerroroccurredwhileexecutingaquery
解决方案六:
Cause:java.lang.ClassCastException:org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.Listatorg.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:59)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:95)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)~[mybatis-3.1.1.jar:3.1.1]
解决方案
解决方案七:
IConVideoInfoDao.selectById正常是返回一个实体吧你返回的应该的是List无法转换org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.List
解决方案八:
引用1楼jimmy609的回复:
IConVideoInfoDao.selectById正常是返回一个实体吧你返回的应该的是List无法转换org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.List
这个是没问题的,源码也是通过size()构造返回值的,这个问题是偶尔出现,同一段代码有时候没问题,有时候有问题。
解决方案九:
Theerrormayinvolvecom.letv.mms.core.dao.IConVideoInfoDao.selectById这里看上去只能查出一个结果,最好能看到代码
解决方案十:
看看大数据的时候有没有脏数据之类的,看结果集试试!
解决方案十一:
应该不是代码问题,是生产环境和本地不一致造成的。你比对下,你本地的JDK,Tomcat,或Weblogic,Websphere容器,各版本是否一致。
解决方案十二:
引用4楼winy_lm的回复:
看看大数据的时候有没有脏数据之类的,看结果集试试!
应该不是,因为一个id多次查询可能就中间的一次有问题。
解决方案十三:
引用3楼Inhibitory的回复:
Theerrormayinvolvecom.letv.mms.core.dao.IConVideoInfoDao.selectById这里看上去只能查出一个结果,最好能看到代码
我的代码应该是没问题的,因为同一个id多次查询也是有的时候有问题。具体异常在这里抛出Causedby:java.lang.ClassCastException:org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.Listatorg.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:124)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101)~[mybatis-3.1.1.jar:3.1.1]...42commonframesomitted
解决方案十四:
引用1楼jimmy609的回复:
IConVideoInfoDao.selectById正常是返回一个实体吧你返回的应该的是List无法转换org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.List
顶
解决方案十五:
类型转换异常、你看下哪里出现转换异常的、
解决方案:
光看问题,貌似是你返回值的问题,ibatis原来是要返回对象,结果你设置的返回集合~具体就不清楚了,你说的时不时报的话...很蛋疼
解决方案:
引用楼主zmy5353的回复:
今天在开发的时候,在数据量小的情况查询时正常,但是上到生产环境,查询量大的时候,时不时的就会抛出下面的异常。有没有大神帮忙解答一下~~mybatis的版本是3.1.1,用spring整合的。org.apache.ibatis.exceptions.PersistenceException:
解决方案:
Errorqueryingdatabase.Cause:java.lang.ClassCastException:org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.List
解决方案:
Theerrormayexistinclasspathresource[mybatis/ConVideoInfoMapper.xml]
解决方案:
Theerrormayinvolvecom.letv.mms.core.dao.IConVideoInfoDao.selectById
解决方案:
Theerroroccurredwhileexecutingaquery
解决方案:
Cause:java.lang.ClassCastException:org.apache.ibatis.executor.ExecutionPlaceholdercannotbecasttojava.util.Listatorg.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:59)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:95)~[mybatis-3.1.1.jar:3.1.1]atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)~[mybatis-3.1.1.jar:3.1.1]
结贴了,由于是多数据源动态注入的SqlSession,取的时候没有包装成SqlSessionTemplate,没有走spring提供的代理。改成从sqlSessionTemplate.getMapper()取得dao之后,就不在有这种问题。但是问题的原因并没有找到,如果大神们有知道原因的可以继续~~