Spring Data JPA에서는 Auditing이라는 기능을 제공한다.
"audit"이 "감시하다"라는 의미를 가지는 것처럼 Auditing은 엔티티에 대한 CRUD 동작을 추적하고 기록하는 기능이다.
@Configuration
클래스에 @EnableJpaAuditing
애너테이션을 추가하여 Auditing 기능을 활성화한다.
@SpringBootApplication
에 @Configuration
이 포함되어 있으므로 여기에 추가해도 된다.
@EnableJpaAuditing
@SpringBootApplication
public class ExampleApplication { ... }
엔티티 클래스에 @EntityListeners
애너테이션을 추가하면 엔티티에 대한 영속성 이벤트를 수신하는 리스너 클래스를 설정할 수 있다.
Auditing 기능을 적용하려면 AuditingEntityListener
클래스를 설정하면 된다.
위에서 Auditing 리스너를 설정한 엔티티 클래스의 필드에 다음 애너테이션을 추가하면 된다.
@CreatedDate
: 엔티티가 생성된 일자 (LocalDateTime
타입 필드)@CreatedBy
: 엔티티를 생성한 주체의 이름 (String
타입 필드)@LastModifiedDate
: 엔티티가 마지막으로 수정된 일자 (LocalDateTime
타입 필드)@LastModifiedBy
: 엔티티를 마지막으로 수정한 주체 (String
타입 필드)@Entity
@EntityListeners({ AuditingEntityListener.class })
public class Foo {
@CreatedDate
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@CreatedBy
@Column(name = "created_by")
private String createdBy;
@LastModifiedDate
@Column(name = "modified_at")
private LocalDateTime modifiedAt;
@LastModifiedBy
@Column(name = "modified_by")
private String modifiedBy;
...
}
클래스에 MappedSuperclass
애너테이션을 추가하면 서브클래스에게 컬럼을 상속할 수 있다.
@Entity
public class Bar extends Foo {
// Foo의 각 필드를 컬럼으로 사용할 수 있다.
...
}