用mybatis映射SQL语句的时候出现异常 java.lang.UnsupportedOperationException

来源:互联网 发布:淘宝退款原因有哪些 编辑:程序博客网 时间:2024/06/17 02:29

部分报错如下:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.lang.UnsupportedOperationException
### The error may exist in file [E:\git\gitworkspace\lotteryNetwork\lottery\target\classes\com\yc\ssq\bean\UserSsqMapper.xml]
### The error may involve com.yc.ssq.bean.UserSsqMapper.findAfterBuy
### The error occurred while handling results
### SQL: select a.usid as usid, orderid,ordertime,ssq_issue,redball,blueball,sigprice,multinum from    (select usid,userid,orderid,ordertime from userSsq where usid=?) a    inner join    (select usid,ssq_issue,redball,blueball,sigprice,multinum from betSsq where usid=?) b    on a.usid = b.usid
### Cause: java.lang.UnsupportedOperationException
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
    at $Proxy24.selectList(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)
    at com.yc.dao.impl.BaseDaoMybatisImpl.findAll(BaseDaoMybatisImpl.java:99)
    at com.yc.ssq.biz.impl.UserSsqBizImpl.findTest(UserSsqBizImpl.java:82)
    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)

... ...

在日志中的记录如下:

2017-08-20 20:07:56  org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:145)  ==>  Preparing: select a.usid as usid, orderid,ordertime,ssq_issue,redball,blueball,sigprice,multinum from (select usid,userid,orderid,ordertime from userSsq where usid=?) a inner join (select usid,ssq_issue,redball,blueball,sigprice,multinum from betSsq where usid=?) b on a.usid = b.usid
2017-08-20 20:07:56  org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:145)  ==> Parameters: 8(Integer), 8(Integer)

按照这个语句逻辑来说,这个语句和参数都是没有问题的,那么问题就可能出在mapper的返回值类型上:

<select id="findAfterBuy" parameterType="java.lang.Integer" resultType="java.util.List">
        select a.usid as usid, orderid,ordertime,ssq_issue,redball,blueball,sigprice,multinum from
            (select usid,userid,orderid,ordertime from userSsq where usid=#{usid}) a
            inner join
            (select usid,ssq_issue,redball,blueball,sigprice,multinum from betSsq where usid=#{usid}) b
            on a.usid = b.usid
    </select>

问题所在:resultType="返回结果类型",一般把结果映射到对应的JAVAbean,select 返回的每一条记录的类型,而不是所有记录组成的类型。我需要得到的是List<UserSsq>,每一条得到的结果类型是UserSsq,所以应该修改为如下:

<select id="findAfterBuy" parameterType="java.lang.Integer" resultType="UserSsq">
        select a.usid as usid, orderid,ordertime,ssq_issue,redball,blueball,sigprice,multinum from
            (select usid,userid,orderid,ordertime from userSsq where usid=#{usid}) a
            inner join
            (select usid,ssq_issue,redball,blueball,sigprice,multinum from betSsq where usid=#{usid}) b
            on a.usid = b.usid
    
    </select>

问题就解决了,返回结果如下:

[

UserSsq [usid=8, userid=null, orderid=20170820187327, ordertime=2017-08-20 17:11:48.0, betlists=null, ssqs=[ ]  ],

UserSsq [usid=8, userid=null, orderid=20170820187327, ordertime=2017-08-20 17:11:48.0, betlists=null, ssqs=[ ]  ]

]

原创粉丝点击