[JPA] Auditing

Y_Sevin·2022년 5월 11일
0

JPA Auditing 이란?

Java Persistence API(JPA)에서 제공하는 Auditing 기능무엇일까? Auditing은 JPA에서 데이터 변경 이력을 추적하고 관리하는 기능이다.

2. JPA Auditing 설정

JPA Auditing을 사용하려면 몇 가지 설정이 필요하다.
먼저, 엔터티 클래스에 @EntityListeners(AuditingEntityListener.class)를 추가하여 Auditing을 활성화한다.
그리고 @EnableJpaAuditing 어노테이션을 Spring Boot 애플리케이션의 메인 클래스에 추가하여 JPA Auditing을 활성화한다.

@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // 나머지 필드 및 메소드

}
@SpringBootApplication
@EnableJpaAuditing
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

3. CreatedBy, CreatedDate, LastModifiedBy, LastModifiedDate

JPA Auditing은 주로 네 가지 필드를 관리한다.

  • @CreatedBy: 엔터티가 생성될 때, 해당 엔터티를 생성한 사용자의 정보를 저장합니다.
  • @CreatedDate: 엔터티가 생성된 일시를 저장합니다.
  • @LastModifiedBy: 엔터티가 수정될 때, 해당 엔터티를 수정한 사용자의 정보를 저장합니다.
  • @LastModifiedDate: 엔터티가 마지막으로 수정된 일시를 저장합니다.
@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // 나머지 필드

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedBy
    private String lastModifiedBy;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // 나머지 메소드

}

위처럼 엔티티에 설정할 수 도있고 아래와 같이 공통부분을 정의하고 상속받아 사용할 수 도있다.

@Getter  
@MappedSuperclass  
@EntityListeners(AuditingEntityListener.class)  
public abstract class BaseTimeEntity {  
    @CreatedDate  
	@Column(updatable = false)
    private LocalDateTime createdDate;  
	@LastModifiedDate  
	private LocalDateTime lastModifiedDate;  
}

@Entity
public class user extends BaseTimeEntity{
	...
}
  • public abstract class BaseTimeEntity 에서 abstract 추상클래스로 생성하는 이유는 인스턴스 생성을 금지하기 위함이다.
  • @Column(updatable = false) createDate는 생성 이후에 업데이트가 되면 안된다.

참고

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글