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

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)

 

2.时间:

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

 

总结:

这个问题不是一定会出现,我在其他项目中同样的写法就没有报错, 通过网上查阅资料得知,

问题应该就是出在这里

 

posted @ 2024-01-05 08:52  loveCrane  阅读(87)  评论(0编辑  收藏  举报