如何解决为什么我们需要使用spring data jpa 而不是附加到实体生命周期事件的回调方法
如果我们需要将 creation
和 modification time
,以及 who created
和 updated
我们的实体添加到我们的实体中,我们不必使用 Spring Data JPA .我们可以通过创建附加到实体生命周期事件的回调方法来设置这些字段的字段值。
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import javax.persistence.Column;
import javax.persistence.MappedSuperClass
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.time.zoneddatetime;
@MappedSuperClass
public abstract class BaseEntity {
@Column(name = "created_by_user",nullable = false)
@CreatedBy
private String createdByUser;
@Column(name = "modified_by_user",nullable = false)
@LastModifiedBy
private String modifiedByUser;
@Column(name = "creation_time",nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.threeten.Persistentzoneddatetime")
private zoneddatetime creationTime;
@Column(name = "modification_time")
@Type(type = "org.jadira.usertype.dateandtime.threeten.Persistentzoneddatetime")
private zoneddatetime modificationTime;
@PrePersist
public void prePersist() {
zoneddatetime Now = zoneddatetime.Now();
this.creationTime = Now;
this.modificationTime = Now;
String createdByUser = getUsernameOfAuthenticatedUser();
this.createdByUser = createdByUser;
this.modifiedByUser = createdByUser;
}
@PreUpdate
public void preUpdate() {
this.modificationTime = zoneddatetime.Now();
String modifiedByUser = getUsernameOfAuthenticatedUser();
this.modifiedByUser = modifiedByUser;
}
private String getUsernameOfAuthenticatedUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
return ((User) authentication.getPrincipal()).getUsername();
}
}
尽管这种方法比使用 auditing infrastructure of Spring Data JPA
更简单、更直接。
那我们为什么要使用 auditing infrastructure of Spring Data JPA
为什么直接使用 AuditorAware
而不是这个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。