使用mybatis报错:Error instantiating class com.dayu.jobratingserver.entity.TPointTemporaryEntity with invalid types (TPointEntity) or values (701). Cause: java.lang.IllegalArgumentException: argument type mismatch
public TPointTemporaryEntity(){
}
public TPointTemporaryEntity(TPointEntity entity){
this.id = entity.getId();
this.weightId = entity.getWeightId();
this.unitId = entity.getUnitId();
this.unitName = entity.getUnitName();
this.pointText = entity.getPointText();
this.point = entity.getPoint();
this.pointFinally = entity.getPointFinally();
this.remark = entity.getRemark();
this.year = entity.getYear();
}
原因是因为因为实体类 com.xxx..xxxEntity 没有无参的构造函数,只定义有参的构造函数,加了个无参构造函数就解决了,记录一下。
百度了下大致原因有两个:
原因一
实体类 com.xxx..xxxEntity 就是你返回结果实际的实体类。
这种情况下是因为实体类 com.xxx..xxxEntity 没有无参数的构造函数,一般是定义了有参数的构造函数,但没有添加无参构造函数,这种情况下添加一个无参构造函数即可解决。
原因二
实体类 com.xxx.*.xxxEntity 是你的泛型的类,并不是你实际返回的实体类。
这时,意味着 mybatis 解决 dao 层返回结果类里,未能根据泛型找到对应类,这个问题的重现方式是使用
mybatis 3.4.6 然后 泛型 dao 层继承三层以上。
原因三
实体类 最好不要使用简单类型,如int, long等,改用对象模式Integer, Long等。在写条件查询时会用到判断<if xxx != null > … </if>的com.xxx.*.xxxEntity 是你的泛型的类,并不是你实际返回的实体类。