bug记录-MyBatis 通用mapper使用 selectByPrimaryKey 报错记录

发布时间 2024-01-05 08:56:38作者: loveCrane

1问题
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in net.yto.global.edi.common.shared.po.TEdiTiktokExpand matching [java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy131.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:83)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy164.selectByPrimaryKey(Unknown Source)

时间: 2024年1月4日15:56:25

3过程分析
经验证是因为我在对应的java实体中手动新加了一个 非全参的构造方法

点击查看代码
@Data
@Table(name = "t_edi_tiktok_expand")
public class TEdiTiktokExpand {

    /**
     * 抖音订单号
     */
    @Id
    @Column(name = "tiktok_order_id")
    private String tiktokOrderId;

    /**
     * 抖音商家id
     */
    @Column(name = "tiktok_shop_id")
    private String tiktokShopId;

    /**
     * 创建时间
     */
    @Column(name = "create_time")
    private Timestamp createTime;

    /**
     * 修改时间
     */
    @Column(name = "update_time")
    private Timestamp updateTime;

    public TEdiTiktokExpand(String tiktokOrderId, String tiktokShopId, Timestamp createTime) {
        this.tiktokOrderId = tiktokOrderId;
        this.tiktokShopId = tiktokShopId;
        this.createTime = createTime;
    }
}

4解决方案
1去除非全参构造
2增加注解@AllArgsConstructor