Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'orders' of 'class ... with value '...' Cause: java.lang.IllegalArgumentException: argument type mismatch

Java代码持久类关联关系

//这里一个用户关联多个订单
public class User implements Serializable {
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址

    private List<Orders> orders;//订单
}    

mapper.xml配置

<!-- 一对多关联查询 -->
    <resultMap type="cn.isme.pojo.User" id="userOrdersResultMap">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="sex" column="sex"/>
        <result property="birthday" column="birthday"/>
        <result property="address" column="address"/>
        <!-- <collection property="orders" ofType="cn.isme.pojo.Orders"> --><!--正确-->
     <collection property="orders" javaType="cn.isme.pojo.Orders"><!--错误-->
            <id column="oid" property="id"/>
            <!-- <result column="user_id" property="userId"/> -->
            <result column="number" property="number"/>
            <result column="user_id" property="userId"/>
            <result column="createtime" property="createtime"/>
        </collection>
    </resultMap>
    
    <select id="findUserAssociateOrders" resultMap="userOrdersResultMap">
        SELECT u.*, o.id oid, o.user_id, o.number, o.createtime 
        FROM USER u, orders o WHERE u.id = o.user_id
    </select>

错误描述

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'orders' of 'class cn.isme.pojo.User' with value 'Orders [id=3, userId=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=null]' Cause: java.lang.IllegalArgumentException: argument type mismatch
### The error may exist in cn/isme/mapper/UserMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT u.*, o.id oid, o.user_id, o.number, o.createtime FROM USER u, orders o WHERE u.id = o.user_id
### Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'orders' of 'class cn.isme.pojo.User' with value 'Orders [id=3, userId=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=null]' Cause: java.lang.IllegalArgumentException: argument type mismatch

 

错误原因

在UserMapper.xml中涉及到defaultParameterMap发生错误,在设置参数时,Orders对象通过反射无法注入到User.orders属性当中

 

解决方法

collection部分定义了用户关联的订单信息。表示关联查询结果集

property="orders":关联查询的结果集存储在User对象的上哪个属性。

 

 

javaType="orders":指定pojo中属性类型

ofType="orders":指定的为映射的集合中泛型属性即List<Orders> orders中的泛型Orders

 

<collection property="orders" javaType="cn.isme.pojo.Orders">

由于上述写的javaType="orders",当给User.orders集合属性注入时,javaType表示User.orders类型为Orders类型,而我们实际为List<Orders>集合类型,所以导致出现类型不匹配的情况,这里我们需要使用ofType="orders"指定orders集合中的泛型

 



posted @ 2018-04-24 23:39  孤单梦境  阅读(1250)  评论(0)    收藏  举报