微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我们需要使用spring data jpa 而不是附加到实体生命周期事件的回调方法

如何解决为什么我们需要使用spring data jpa 而不是附加到实体生命周期事件的回调方法

如果我们需要将 creationmodification time,以及 who createdupdated 我们的实体添加到我们的实体中,我们不必使用 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 举报,一经查实,本站将立刻删除。