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

水深无声 2023-03-14 05:51 100阅读 0赞

mybaits 错误

  1. <resultMap id="roleMap" type="Role">
  2. <id column="role_id" property="roleId"></id>
  3. <result column="role_name" property="roleName"></result>
  4. <result column="remark" property="remark"></result>
  5. <!-- <result column="dept_id" property="deptId"></result>-->
  6. <result column="create" property="create"></result>
  7. <collection property="users" javaType="user">
  8. <id column="user_d" property="userId"></id>
  9. <result column="username" property="username"></result>
  10. <result column="password" property="password"></result>
  11. <result column="salt" property="salt"></result>
  12. <result column="email" property="email"></result>
  13. <result column="mobile" property="mobile"></result>
  14. <result column="status" property="status"></result>
  15. <result column="dept_id" property="deptId"></result>
  16. <result column="create_time" property="createTime"></result>
  17. </collection>
  18. </resultMap>

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

  1. 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=?
  2. 2020-05-08 19:54:04,147 [main] DEBUG [com.ujiuye.mapper.UserMapper.selectUserById] - ==> Parameters: 1(Long)
  3. org.apache.ibatis.exceptions.PersistenceException:
  4. ### 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
  5. ### The error may exist in com/ujiuye/mapper/UserMapper.xml
  6. ### The error may involve com.ujiuye.mapper.UserMapper.selectUserById
  7. ### The error occurred while handling results
  8. ### 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=?
  9. ### 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
  10. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
  11. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
  12. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
  13. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)
  14. ... 49 more
  15. Process finished with exit code -1

改正后:

  1. <resultMap id="userRoles" type="User">
  2. <id column="user_id" property="userId"></id>
  3. <result column="username" property="username"></result>
  4. <result column="password" property="password"></result>
  5. <result column="salt" property="salt"/>
  6. <collection property="roles" ofType="Role">
  7. <id column="role_id" property="roleId"/>
  8. <result column="role_name" property="roleName"/>
  9. </collection>
  10. </resultMap>

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

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

发表评论

表情:
评论列表 (有 0 条评论,100人围观)

还没有评论,来说两句吧...

相关阅读