首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

在Mybatis中执行sql语句出现UnsupportedOperationException异常

2013-11-20 
在Mybatis中执行sql语句出现UnsupportedOperationException错误本帖最后由 qq272936993 于 2013-11-03 22:

在Mybatis中执行sql语句出现UnsupportedOperationException错误
本帖最后由 qq272936993 于 2013-11-03 22:45:45 编辑 今天做一个动态的sql的时候出现这个问题:


java.lang.UnsupportedOperationException
at org.apache.ibatis.reflection.wrapper.CollectionWrapper.findProperty(CollectionWrapper.java:42)
at org.apache.ibatis.reflection.MetaObject.findProperty(MetaObject.java:76)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:410)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:334)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:289)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:264)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:234)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:152)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:57)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:70)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:57)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:259)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:132)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
at com.sun.proxy.$Proxy26.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:114)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43)
at com.sun.proxy.$Proxy27.execJdbcListObject(Unknown Source)
at com.talkweb.service.impl.BaseServiceImpl.execJdbcListObject(BaseServiceImpl.java:24)
at com.talkweb.web.cluster.CustomControl.query(CustomControl.java:38)

我之前也有一个是动态拼接然后整个sql语句作为参数执行,都是可以的..不知道为什么,这里出现了问题.
我先说下我的XML配置:

    <select id="execJdbcListObject" parameterType="com.talkweb.data.comm.SQLAdapter" resultType="java.util.List">
        ${sql}
    </select>

我看了下源码...

  private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory)
  {
    this.originalObject = object;
    this.objectFactory = objectFactory;
    this.objectWrapperFactory = objectWrapperFactory;

    if ((object instanceof ObjectWrapper))
      this.objectWrapper = ((ObjectWrapper)object);
    else if (objectWrapperFactory.hasWrapperFor(object))
      this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);
    else if ((object instanceof Map))
      this.objectWrapper = new MapWrapper(this, (Map)object);
    else if ((object instanceof Collection))
      this.objectWrapper = new CollectionWrapper(this, (Collection)object);
    else
      this.objectWrapper = new BeanWrapper(this, object);
  }

貌似我返回来的每个对象中还有一个List对象一样...关键是,这个结果集没有,数据库都是varchar类型.不知道怎么就判断到了CollectionWrapper,求大神指点. java web mybatis 框架 sql
[解决办法]
你把你的SQL打印出来 去跑一边看看 哪错了。
[解决办法]
resultType不正确,一般返回的是对象不是容器

热点排行