码上敲享录 > java常见报错解答 > No constructor found in .. matching

No constructor found in .. matching

上一章章节目录下一章 2019-11-27已有3137人阅读 评论(0)

启动项目后台代码报错:

No constructor found in xxx matching

后来找到原因,在实体类中加了有参的构造方法,没有无参构造方法,导致报错,在实体类中也加上无参构造方法就可以正常启动项目了

在实体类中有参和无参构造方法都需要加上

public OperationLog() {

}
public OperationLog(String operationId,String operationType, String content, String openid,String deviceName, String ipAddress) {
this.operationId = operationId;
   this.operationType = operationType;
   this.content = content;
   this.openid = openid;
   this.deviceName = deviceName;
   this.ipAddress = ipAddress;
}

报这个问题是因为在实体类中定义了有参构造函数,但是忽略了无参构造函数的定义,所以在执行查询的时候会报如下错误:

Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in com.ris.event.track.model.EventTrack matching [java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.sql.Timestamp]

比如创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败"这句话有点不妥,应该这么理解:每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new)时,此时编译器才会报错,因为找不到这个无参的构造函数。也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。

所以在创建某个实体类的时候,应该养成一个好习惯,显示构造一个无参构造函数,这样就会避免后面遇到的奇葩问题了。



向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
1

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交