JPA之@EnableJpaAuditing注解
JPA之@EnableJpaAuditing注解| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |
| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 17362434| JPA之@EnableJpaAuditing注解| 2023-04-28T15:51:00| | BlogPost|
在Spring JPA中,支持在字段或方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy。具体含义:
**@CreateDate: ** 表示该字段是创建时间字段,在这个实体被insert的时候,会自动填充创建的时间,不用手动填充该字段。
**@CreatedBy: ** 表示该字段是创建人字段,在这个实体被insert的时候,会自动填充创建人字段,不用手动填充。
@LastModifiedDate、@LastModifiedBy同理。
如何实现自动填充功能,即如何使用审计?
1、在Xxx Application 启动类上添加 @EnableJpaAuditing:开启审计功能。
@EnableScheduling @EnableJpaAuditing //利用jpa可以给MySQL列属性自动赋值,例如一些创建时间,修改时间 @EnableEurekaClient @SpringBootApplication public class CouponTemplateApplication { public static void main(String[] args) { SpringApplication.run(CouponTemplateApplication.class, args); } /** * 测试中如果无法自动识别,可能是包路径的问题,采用手动声明bean的方式 * @return */ @Bean public UserAuditor setUserAuditorAware(){ return new UserAuditor(); } }
2、实体类上添加 @EntityListeners(AuditingEntityListener.class):开启实体类监听。
3、在需要的字段上加上 @CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 等注解。
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity //实体类
@EntityListeners(AuditingEntityListener.class) //监听器,自动赋值创建时间
@Table(name = "coupon_template")
@JsonSerialize(using = CouponTemplateSerialize.class) //绑定自定义的序列化器
public class CouponTemplate implements Serializable {
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 自增主键 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Id
@GeneratedValue(strategy </span>=<span style="color: #000000;"> GenerationType.IDENTITY)
@Column(name </span>= "id",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
@Basic </span><span style="color: #008000;">//</span><span style="color: #008000;">指定属于我们数据表的一个列,相反的@Transient,表示该列不属于数据表</span>
<span style="color: #0000ff;">private</span><span style="color: #000000;"> Integer id;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 是否是可用状态 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Column(name </span>= "available",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Boolean available;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 是否过期 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Column(name </span>= "expired",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Boolean expired;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 优惠券名称 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Column(name </span>= "name",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String name;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 优惠券 logo </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Column(name </span>= "logo",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String logo;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 优惠券描述 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Column(name </span>= "intro",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String desc;
</span><span style="color: #008000;">/**</span><span style="color: #008000;"> 优惠券模板 创建时间
* 使用@CreateDate注解在插入的时候,自动生成创建时间,与监听注解有关
* </span><span style="color: #008000;">*/</span><span style="color: #000000;">
@CreatedDate
@Column(name </span>= "create_time",nullable = <span style="color: #0000ff;">false</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Date createTime;
}
4、实现 AuditorAware 接口来返回你需要插入的值。重点!
@Configuration
@Slf4j
public class UserAuditor implements AuditorAware<String> {
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* 获取当前创建或修改的用户
* </span><span style="color: #808080;">@return</span>
<span style="color: #008000;">*/</span><span style="color: #000000;">
@Override
</span><span style="color: #0000ff;">public</span> Optional<String><span style="color: #000000;"> getCurrentAuditor() {
UserDetails user;
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
user </span>=<span style="color: #000000;"> (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> Optional.ofNullable(user.getUsername());
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e){
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> Optional.empty();
}
}
}
| 648658| | 2023-04-28T15:51:00| false| | 2023-04-28T15:51:21.18| true| 在Spring JPA中,支持在字段或方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy。具体含义: **@CreateDate: ** 表示该字段是创建时间字段,在这个实体被insert的时候,会自动填充创建的时间,不用| Anonymous|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了