mybaits 错误 Cause: java.lang.IllegalArgumentException: argument type mismatch

mybaits 错误

<resultMap id="roleMap" type="Role">
        <id column="role_id" property="roleId"></id>
        <result column="role_name" property="roleName"></result>
        <result column="remark" property="remark"></result>
<!--        <result column="dept_id" property="deptId"></result>-->
        <result column="create" property="create"></result>
        <collection property="users" javaType="user">
            <id column="user_d" property="userId"></id>
            <result column="username" property="username"></result>
            <result column="password" property="password"></result>
            <result column="salt" property="salt"></result>
            <result column="email" property="email"></result>
            <result column="mobile" property="mobile"></result>
            <result column="status" property="status"></result>
            <result column="dept_id" property="deptId"></result>
            <result column="create_time" property="createTime"></result>
        </collection>
    </resultMap>

这是我之前的mapper.xml文件 ,报错如下

2020-05-08 19:54:04,122 [main] DEBUG [com.ujiuye.mapper.UserMapper.selectUserById] - ==>  Preparing: SELECT u.user_id,u.username,u.email,u.mobile, r.role_id,r.role_name FROM sys_user u INNER JOIN sys_user_role ur ON u.user_id=ur.user_id INNER JOIN sys_role r ON ur.role_id=r.role_id WHERE u.user_id=? 
2020-05-08 19:54:04,147 [main] DEBUG [com.ujiuye.mapper.UserMapper.selectUserById] - ==> Parameters: 1(Long)

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'roles' of 'class com.ujiuye.entity.User' with value 'Role(roleId=1, roleName=超级管理员, remark=null, deptId=null, createTime=null, users=null)' Cause: java.lang.IllegalArgumentException: argument type mismatch
### The error may exist in com/ujiuye/mapper/UserMapper.xml
### The error may involve com.ujiuye.mapper.UserMapper.selectUserById
### The error occurred while handling results
### SQL: SELECT u.user_id,u.username,u.email,u.mobile,             r.role_id,r.role_name             FROM sys_user u             INNER JOIN sys_user_role  ur ON u.user_id=ur.user_id             INNER JOIN sys_role r ON ur.role_id=r.role_id             WHERE u.user_id=?
### Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'roles' of 'class com.ujiuye.entity.User' with value 'Role(roleId=1, roleName=超级管理员, remark=null, deptId=null, createTime=null, users=null)' Cause: java.lang.IllegalArgumentException: argument type mismatch

	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)
	... 49 more


Process finished with exit code -1

改正后:

<resultMap id="userRoles" type="User">
          <id column="user_id" property="userId"></id>
          <result column="username" property="username"></result>
          <result column="password" property="password"></result>
          <result column="salt" property="salt"/>
          <collection property="roles" ofType="Role">
              <id column="role_id" property="roleId"/>
              <result column="role_name" property="roleName"/>
          </collection>
      </resultMap>

注意: 我改正的是 collection 标签中的 javaType 改为了 ofType

javaType属性的问题,因为这个是一对多,通过反射应该映射为List,但是使用javaType会让MyBatis认为roles属性为单个对象,所以出错,将javaType改为ofType,只是指定泛型的类型为role。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值