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&lt;String&gt;<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|
posted @   RalphLauren  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示