当前使用版本(必填,否则不予处理)
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一下不就知道了