Java Persistence API(JPA)에서 제공하는 Auditing 기능무엇일까? Auditing은 JPA에서 데이터 변경 이력을 추적하고 관리하는 기능이다.
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);
}
}
JPA Auditing은 주로 네 가지 필드를 관리한다.
@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는 생성 이후에 업데이트가 되면 안된다.