当前使用版本(必填,否则不予处理)

3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

当前使用就是最新版,不清楚是怎么引起的。

重现步骤(如果有就写完整)

open class BaseEntity : Serializable {

    @ApiModelProperty("乐观锁")
    var revision: Int? = null

    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    var createdBy: Long? = null

    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    var createdTime: LocalDateTime? = null

    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    var updatedBy: Long? = null

    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    var updatedTime: LocalDateTime? = null
}
@Component
class AutoFillConfig : MetaObjectHandler{
    override fun insertFill(metaObject: MetaObject) {
        val now = LocalDateTime.now()

        strictInsertFill(metaObject, "createdBy", Long::class.java, 0L)
        strictInsertFill(metaObject, "createdTime", LocalDateTime::class.java, now)
        strictInsertFill(metaObject, "updatedBy", Long::class.java, 0L)
        strictInsertFill(metaObject, "updatedTime", LocalDateTime::class.java, now)
    }

    override fun updateFill(metaObject: MetaObject) {
        val now = LocalDateTime.now()

        strictInsertFill(metaObject, "updatedBy", Long::class.java, 0L)
        strictInsertFill(metaObject, "updatedTime", LocalDateTime::class.java, now)
    }
}

报错信息

java.sql.SQLIntegrityConstraintViolationException: Column 'CREATED_BY' cannot be null

Comment From: VampireAchao

注意事项: 填充原理是直接给entity的属性设置值!!! 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充 字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入 要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法 不需要根据任何来区分可以使用父类的fillStrategy方法 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效

https://baomidou.com/pages/4c6bcf/

Comment From: nan199701

注意事项: 填充原理是直接给entity的属性设置值!!! 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充 字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@component或@bean注入 要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法 不需要根据任何来区分可以使用父类的fillStrategy方法 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效

https://baomidou.com/pages/4c6bcf/

修改为 setFieldValByName() 注入是可以成功注入的,strictInsertFill() 就不能注入

Comment From: miemieYaho

你debug一下不就知道了