查询数据库数据出问题

我用名称精确查询数据,结果显示

2021-10-31 10:42:28.990 ERROR 16368 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.hnsaturn.input005.entity.Song matching [java.lang.Integer, [B, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.time.LocalDateTime, java.time.LocalDateTime]] with root cause

org.apache.ibatis.executor.ExecutorException: No constructor found in com.hnsaturn.input005.entity.Song matching [java.lang.Integer, [B, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.time.LocalDateTime, java.time.LocalDateTime]


我的实体类中是


@Data
@Builder
@EntityScan
public class Song {
    private int id;
    private String singleName;
    private String singer;
    private String lyricist;
    private String songwriter;
    private String arranger;
    private String singleContent;
    private String album;
    private String albumContent;
    private String musicStyle;
    private String link;
    private String lyric;
    private String cover;
    private Date createTime;
    private Date updateTime;

//    public Song(){}
}

报错后,写上 无参,但报错,可能是已经生成了。

为什么我去掉@Builder 就可以了。 自己生成了 get set + tostring

错误信息

控制台报错信息:No constructor found in com.hnsaturn.input005.entity.Song

mybatis 抛出的错误

意思是:你写的类 com.hnsaturn.input005.entity.Song 里面没有构造器(构造函数)

错误定位

使用了 lombok 插件,构造器应该会自动加上,但是结构缺报错说没有构造器,所以问题肯定出在 lombok 相关的注解 @Builder @Data

原因:
这两个注解同时使用时会导致无法添加无参构造方法。

单独使用@Data注解,会生成无参数构造方法。

单独使用@Builder注解,发现生成了全属性的构造方法。

办法

// 同时使用两个注解时 添加无参构造器,并让 lombok 无感知
@Tolerate
  public  Song() {}
}