mybatis

您所在的位置:网站首页 tablefield注解不生效 mybatis

mybatis

2023-06-30 23:57| 来源: 网络整理| 查看: 265

在数据插入时发现mybatis-plus自动填充失效了,于是就去查询mybatis-plus自动填充的配置

@Slf4j @Component public class MetaHandler implements MetaObjectHandler { /** * 新增数据执行 * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { Subject subject = SecurityUtils.getSubject(); if(subject != null && subject.getPrincipal() != null) { User userEntity = (User) subject.getPrincipal(); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("createBy", userEntity.getUsername(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); this.setFieldValByName("updateBy", userEntity.getUsername(), metaObject); } } /** * 更新数据执行 * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { Subject subject = SecurityUtils.getSubject(); if(subject != null && subject.getPrincipal() != null) { User userEntity = (User) subject.getPrincipal(); this.setFieldValByName("updateTime", new Date(), metaObject); this.setFieldValByName("updateBy", userEntity.getUsername(), metaObject); } } }

发现实现类没错,那么是不是没有把实现类导入到mybatis-plus的全局配置中

@Configuration @MapperScan({"com.modules.**.dao.mapper"}) public class MybatisPlusConfig { /** * 自动填充功能 * @return */ @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(new MetaHandler()); return globalConfig; } /** * 分页插件,自动识别数据库类型 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }

 全局配置中也将MetaHandler添加了

于是去查询实体类是不是字段或者表名写错了

@Data @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) @ApiModel("DO父类") public class BaseEntity implements Serializable { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) @TableId(value = "id",type= IdType.AUTO) @ApiModelProperty(value="id",name="id") private Long id; @CreatedBy @Column(name="create_by") @TableField(value = "create_by", fill = FieldFill.INSERT) @Check(name="创建人") @ApiModelProperty(value="创建人",name="createBy") private String createBy; /** * 创建时间 * 在执行insert语句时候自动插入,jpa审计 */ @CreatedDate @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name="create_time") @TableField(value = "create_time", fill = FieldFill.INSERT) @Check(name="创建时间") @ApiModelProperty(value="创建时间",name="createTime") private Date createTime; /** * 更新人 * 最后修改人 */ @LastModifiedBy @Column(name="update_by") @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行 @Check(name="更新人") @ApiModelProperty(value="更新人",name="updateBy") private String updateBy; /** * 更新时间 * 最后一次修改时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @LastModifiedDate @Column(name="update_time") @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行 @Check(name="更新时间") @ApiModelProperty(value="更新时间",name="updateTime") private Date updateTime; }

发现字段名和表对于的列名都没错,但是突然发现base类引入了JPA审计的自动填充功能,也就是

@CreatedBy @LastModifiedDate等注释,于是打开debug断点调试,最终发现是mybatis-plus的自动填充与JPA审计的自动填充引起了冲突,于是放弃mybatis-plus的自动填充,使用JPA审计的自动填充

@Data @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) @ApiModel("DO父类") public class BaseEntity implements Serializable { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) @TableId(value = "id",type= IdType.AUTO) @ApiModelProperty(value="id",name="id") private Long id; @CreatedBy @Column(name="create_by") @TableField(value = "create_by", fill = FieldFill.INSERT) @Check(name="创建人") @ApiModelProperty(value="创建人",name="createBy") private String createBy; /** * 创建时间 * 在执行insert语句时候自动插入,jpa审计 */ @CreatedDate @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name="create_time") @TableField(value = "create_time", fill = FieldFill.INSERT) @Check(name="创建时间") @ApiModelProperty(value="创建时间",name="createTime") private Date createTime; /** * 更新人 * 最后修改人 */ @LastModifiedBy @Column(name="update_by") @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行 @Check(name="更新人") @ApiModelProperty(value="更新人",name="updateBy") private String updateBy; /** * 更新时间 * 最后一次修改时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @LastModifiedDate @Column(name="update_time") @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行 @Check(name="更新时间") @ApiModelProperty(value="更新时间",name="updateTime") private Date updateTime; /** * 0是正常 1是删除 -1 是禁用 */ @Column(name="del_flag") @TableField(value = "del_flag") @ApiModelProperty(value="删除标识",name="delFlag") private Integer delFlag = 0; @Column(name="system_org_no") @TableField(value = "system_org_no", fill = FieldFill.INSERT) @Check(name="事业部编号") @ApiModelProperty(value="事业部编号",name="orgNo") private String systemOrgNo; @Column(name="system_org_name") @TableField(value = "system_org_name", fill = FieldFill.INSERT) @Check(name="事业部名称") @ApiModelProperty(value="事业部名称",name="parentOrgName") private String systemOrgName; @PrePersist public void perPersist() { Subject subject = SecurityUtils.getSubject(); if (subject != null && subject.isAuthenticated()) { User principal = (User) subject.getPrincipal(); addOrgInfo(principal); } } //添加登录用户的部门信息 private void addOrgInfo(User principal){ List departments = principal.getDepartments(); if (departments.size()==1){ this.systemOrgNo =departments.get(0).getOrgNo(); this.systemOrgName = departments.get(0).getOrgName(); }else { List orgNo = departments.stream().map(Department::getOrgNo).collect(Collectors.toList()); List orgName = departments.stream().map(Department::getOrgName).collect(Collectors.toList()); this.systemOrgNo = JSONObject.toJSONString(orgNo); this.systemOrgName = JSONObject.toJSONString(orgName); } } }

最后成功填充



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3