1. 시작하며
JPA Auditing 을 통해 등록/수정 날짜/시간 설정을 자동화 해보자.
2. 왜 JPA Auditing 쓰나?
매번 엔티티의 날짜/시간 데이터가 변경돨 때마다 이를 코드로 수정한다면 여기저기 입력/수정 코드를 구현해야한다. 그러나 JPA Auditing를 사용하면 공통으로 처리할 수 있다.
3. JPA Auditing 구현
1) BaseEntity 추상 클래스를 생성한다
도메인에 BaseEntity 클래스를 생성한다. BaseEntity는 모든 Entity의 상위 클래스이다. 따라서 이를 상속받는 Entity들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 한다.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@Column(name = "created_date", nullable = false, updatable = false)
@CreatedDate
private LocalDateTime createdDate;
@Column(name = "modified_date")
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@MappedSuperclass
- JPA Entity 클래스들이 BaseEntity를 상속할 때 createdDate,modifiedDate 도 컬럼으로 인식하도록 한다.
@EntityListeners(AuditingEntityListener.class)
- BaseEntity에 Auditing 기능을 포함 시킨다.
@EntityListeners
는 리스너 클래스 지정을 통해 엔티티 객체 상태가 변경될 때 해당 리스너로 콜백을 받는다.- AuditingEntityListener 는 JPA 내부에서 엔티티 객체가 생성/변경 되는 것을 감지한다.
@CreatedDate
- 생성일 자동 저장
@LastModifiedDate
- 마지막 수정시간 자동 저장
2) 도메인 클래스가 BaseEntity를 상속 받도록 수정한다
public class Posts extends BaseEntity {
}
3) JPA Auditing 활성화 한다
@EnableJpaAuditing
옵션을 활성화한다.
@EnableJpaAuditing
@SpringBootApplication
public class SpringbootWebserviceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebserviceApplication.class, args);
}
}
4. LocalDate / LocalDateTime
java8 부터는 LocalDate 와 LocalDateTime 를 써야 한다.
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate : 2021-12-25
LocalTime : 22:08:07.800537900
LocalDateTime : 2021-12-25T22:08:07.800537900
5. 마치며
JPA auditing 을 통해 등록일, 수정일을 자동화 할 수 있다. BaseEntity를 추상클래스로 등록하고 @EntityListeners(AuditingEntityListener.class)
를 추가한다. 그 후 다른 entity에서는 이를 상속 받아 사용한다. 그리고 @EnableJpaAuditing
를 활성화 해야한다.
다음에는 등록/수정자에 대해서도 알아보자.
참고
반응형