복붙노트

[SPRING] 엔티티 JPA의 변경 감사

SPRING

엔티티 JPA의 변경 감사

스프링 MVC + JPA 애플리케이션이 있습니다.

나는 끊임없이 변화하는 응용 분야에서 여러 요소를 가지고있다. 이 변경 사항을 감사 할 수 있기를 원합니다. 특정 필드 또는 전체 엔터티에 대한 변경 내용을 추적하는 @Audited 주석이 있음을 발견했습니다. 이 트랙 옵션을 구성 할 수있는 방법이 있는지 알고 싶습니다. 변경된 항목과 변경된 항목을 추적 할 수 있기를 원합니다. SQL의 1 테이블에서 여러 엔터티의 변경 사항을 가질 수 있습니까? 또한 Entity에서 @OneToMany Fields의 변경 사항을 추적 할 수 있습니까?

감사

해결법

  1. ==============================

    1.예, 변경된 내용을 추적하고 사용자 및 타임 스탬프를 업데이트 할 수 있습니다.

    예, 변경된 내용을 추적하고 사용자 및 타임 스탬프를 업데이트 할 수 있습니다.

    Hibernate는 엔티티 버전을 유지하기 위해 @Audited 어노테이션을 제공한다.

    Spring은 @CreatedBy @LastModifiedBy @CreatedDate와 @LastModifiedDate 주석을 제공하며, 이들 중 AuditorAware bean을 사용하여 업데이트하는 사용자 이름을 제공해야한다.

    감사를 사용하려면,

    @Bean
    public AuditorAware<String> createAuditorProvider() {
        return () -> "username"; // should be from context/session
    }
    

    각 엔티티마다 버전을 유지하기 위해 추가 테이블이 생성됩니다.

    아래는 하이버 네이트 및 스프링 감사와의 일대 다 관계의 예입니다

    UserInfo.java

    @Audited
    @Entity
    @EntityListeners(AuditingEntityListener.class)
    public class UserInfo extends AuditInfo {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column
        private String name;
    
        @OneToMany(mappedBy = "userInfo", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        private List<UserAddress> addresses;
    
    }
    

    UserAddress.java

    @Entity
    @Audited
    @EntityListeners(AuditingEntityListener.class)
    public class UserAddress extends AuditInfo {
    
        @Id
        @GeneratedValue
        private Long addressId;
    
        @ManyToOne
        @JoinColumn(name = "id", nullable = false)
        private UserInfo userInfo;
    
        @Column
        private Long no;
    
        @Column
        private String street;
    
    }
    

    AuditInfo.java

    @EntityListeners(AuditingEntityListener.class)
    @MappedSuperclass
    public abstract class AuditInfo {
    
        @CreatedBy
        private String createdBy;
    
        @LastModifiedBy
        private String updatedBy;
    
        @CreatedDate
        private LocalDateTime createdOn;
    
        @LastModifiedDate
        private LocalDateTime updatedOn;
    
    }
    
  2. from https://stackoverflow.com/questions/38161180/auditing-changes-in-entity-jpa by cc-by-sa and MIT license