在今天写代码时候发现了这么个mybatis问题:
org.apache.ibatis.reflection.ReflectionException: Error instantiating class
错误信息如下所示
2020-09-18 09:24:50.229 [http-nio-10250-exec-1] ERROR [com.sitech.cmap.comp.wsg.dl.controller.DatumLineController] - nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.sitech.cmap.dao.simple.comp.po.OmDatumLineVersionKv with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.sitech.cmap.dao.simple.comp.po.OmDatumLineVersionKv.<init>()
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.sitech.cmap.dao.simple.comp.po.OmDatumLineVersionKv with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.sitech.cmap.dao.simple.comp.po.OmDatumLineVersionKv.<init>()
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75) ~[mybatis-spring-1.2.2.jar:1.2.2]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371) ~[mybatis-spring-1.2.2.jar:1.2.2]
at com.sun.proxy.$Proxy131.selectList(Unknown Source) ~[?:?]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198) ~[mybatis-spring-1.2.2.jar:1.2.2]
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.2.8.jar:3.2.8]
at com.sun.proxy.$Proxy153.selectByExample(Unknown Source) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
显示的是无法初始化对象,
得知mybatis在初始化对象时,需要无参构造进行load属性,检查一下自己的类是否有问题,发现如下:
import javax.persistence.*;
@Builder
@Table(name = "om_datum_line_version_kv")
public class OmDatumLineVersionKv {
/**
* 基线版本键id
*/
@Id
@Column(name = "dl_v_key_id")
private String dlVKeyId;
/**
* 基线版本键
*/
@Column(name = "dl_v_key")
private String dlVKey;
我在这里用了lombok的注解@Builder,那么问题就应该出现在这里了,Ctrl+F12:

从中可以看出缺少了无参构造方法:那么去掉注解@Builder 或者 再增加一个注解@NoArgsConstructor @AllArgsConstructor 就可以了。

网友评论