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集合中的泛型

浙公网安备 33010602011771号