简介
自己集成并按照网上所说的mybatis-plus解决方案想自动填充createTime与updateTime,结果发现有一个实体类生效有一个实体类落库无论如何都没法自动填充。网上各种解决方案都有,但是都无法解决问题,那怎么办呢,自己跟踪源码(懒人最讨厌自己看源码)
先说说我自身实体类entity的设计:
抽取出公有的属性,按照阿里巴巴规范每张表都必须要有创建时间与更新时间
@Data
public class BaseEntity {
@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
其余的dao实体类继承自这个实体类
//映射到分类表
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("t_kb_category")
public class KbCategory extends BaseEntity{
/**
* 分类id
*/
private Integer categoryId;
/**
* 分类名称
*/
private String categoryName;
/**
* 分类父id
*/
private Integer categoryParentId;
/**
* 分类级别
*/
private Integer level;
}
//映射到文章表
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("t_customer_article")
public class KbCustomerArticle extends BaseEntity{
private Long id;
/**
* 文档名称
*/
private String articleName;
/**
* 文档标题
*/
private String articleTitle;
/**
* 文档分类id
*/
private Integer articleCategoryId;
/**
* 文档描述
*/
private String articleDesc;
/**
* 文档地址
*/
private String articleContent;
/**
* 文档类型
*/
private String articleType;
}
然后我再前端分别创建分类或者上传文章
创建分类
上传文章
image.png
结果发现只有上传文章能自动填充更新时间和创建时间,添加分类的功能并不行。
解决方案
开始跟踪MetaObjectHandler里的方法是什么时候被调用
发现在这个类里会进行处理
debug发现根本走不进这个标注的if分支,这是为啥呢,发现tableInfo这个实体类中的keyProperty为null,反应过来,发现我再数据库中将主键id命名为categoryId了,但是在实体类中没有指定,所以mybatis认为我没有主键,tableInfo默认你的主键如果有id字段默认为主键并且idType=NONE。所以,只需要将KbCategory实体类的categoryId这个字段指定为主键即可。
网友评论