8、乐观锁
乐观锁是属于hibernate!
防止并发修改!
private @Version Long version;
9、审计
如何使用审计功能
首先申明实体类,需要在类上加上注解@EntityListeners(AuditingEntityListener.class),其次在application启动类上添加注解@EnableJpaAuditing,同时在需要的字段上添加@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy等注解。
这个时候,在 Jpa.save()方法被调用的时候,时间字段会自动设置并插入数据库,但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的值。
1、编写AuditorAware
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
/**
* 监听
* @CreatedBy
* @LastModifiedBy
* 自动注入用户名
*/
public class AuditorAwareConfig implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.empty();
}
}
----------------------------------------------
/**
* 这是JavaConfig方式!
* AuditorAware 返回当前用户
* @return
*/
@Bean
public AuditorAware<String> auditorAware() {
return new AuditorAware<String>() {
@Override
public Optional getCurrentAuditor() {
// 当前用户 session redis springsecurity
return Optional.of("yykk");
}
};
}
2、在实体类上声明@EntityListeners和响应的注解
考虑到所有实体都要声明,都写在 BaseEntityModel 中
package com.yykk.config;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.io.Serializable;
import java.util.Date;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public class BaseEntityModel implements Serializable {
private static final long serialVersionUID = -6163675075289529459L;
@CreatedBy
String createdBy;
@LastModifiedBy
String modifiedBy;
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
protected
Date dateCreated = new Date();
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
protected
Date dateModified = new Date();
}
3、在Application中启用审计@EnableJpaAuditing
@EnableJpaAuditing
如果要进行使用的话,需要导入aop的依赖,虽然有aop但是报错没有aspects,添加如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.15</version>
</dependency>
经过测试如果你的实体类上面的多个字段使用了@CreatedBy这样的注解,只会有一个生效,也就是说在一次请求中,只会被调用一次!