Spring注解@CreatedBy与@CreatedDate失效,@LastModified相关注解正常
问题
创建MongoDB文档类时,通过Spring Data注解自动填充creationDate、lastModifiedDate、createdBy和lastModifiedBy字段,仅@CreatedBy和@CreatedDate标注的字段值为null,@LastModifiedBy和@LastModifiedDate可正常填充。
关联代码
RoleMapping.java
import com.abcd.ops.cp.bo.BaseDBEntity; import lombok.*; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.util.Set; @Document @Getter @Setter @NoArgsConstructor @Builder public class RoleMapping extends BaseDBEntity { @Id private String roleName; private Set<RBACEntity> entities; private String description; private RoleType roleType = RoleType.SYSTEM_DEFINED; @Builder public RoleMapping(String roleName, Set<RBACEntity> entities, String description, RoleType roleType) { super(roleName); this.roleName = roleName; this.entities = entities; this.description = description; this.roleType = roleType; } }
BaseDBEntity.java
package com.abcd.ops.cp.bo; import lombok.*; import org.springframework.data.annotation.*; import java.util.Date; @Getter @Setter @NoArgsConstructor public abstract class BaseDBEntity { @CreatedBy private String createdBy; @CreatedDate private Date creationDate; @LastModifiedDate private Date lastModifiedDate; @LastModifiedBy private String lastModifiedBy; }
解决方法
启用Mongo审计功能
在Spring配置类(或主启动类)上添加@EnableMongoAuditing注解,确保Spring Data MongoDB的审计拦截器生效。配置AuditorAware Bean
@CreatedBy依赖AuditorAware接口实现来获取当前操作用户,未配置时该字段会为null。示例配置:@Configuration @EnableMongoAuditing public class MongoAuditConfig { @Bean public AuditorAware<String> auditorProvider() { // 替换为实际获取当前用户的逻辑,比如从SecurityContext中提取 return () -> Optional.of("default-user"); } }使用Repository的save方法
如果通过@Builder手动构建实体后直接插入数据库,审计逻辑可能未触发。必须调用MongoRepository提供的save()方法来保存实体,确保审计拦截器能处理创建时间和创建人字段。检查注解与权限
- 确认使用的是
org.springframework.data.annotation包下的@CreatedDate和@CreatedBy注解,避免导入错误包。 - 实体字段的getter/setter方法已生成(代码中
@Getter/@Setter已满足要求),确保审计逻辑能正常访问并修改字段值。
- 确认使用的是
内容的提问来源于stack exchange,提问作者user12755352
相关产品推荐
相关产品推荐

