처음 BaseEntity를 만들어 created_at 과 updated_at을 넣어보려고 했다.
그런데 이상하게 자꾸만 두 컬럼에 null값이 들어가 뭐가 문제인지 찾기 시작했다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false, nullable = false)
private LocalDateTime created_at;
@LastModifiedDate
@Column(nullable = false)
private LocalDateTime updated_at;
}
기존에는 created_at에만 updatable=false 만 넣어두었는데, 이번에는 created_at, updated_at 이 두개에 nullable=false를 넣어보았다.
결과는 당연하게도 오류가 생겼다..
진짜 뭐가 문제인지 전혀 몰랐다.
다른 사람들은 BaseEntity를 어떻게 작성을 했는지 찾아보았는데 나랑 별 다를게 없었다.
그래서 한번 다른 글을 읽어보며 뭐가 문제인지 천천히 찾아보았다.
찾다보니 계속해서 나오는 키워드는 EnableJpaAuditing 이것이었다.
Application 실행하는 제일 최 상단에 붙혀주라던데 이게 도대체 뭘까?
일단 한번 붙혀보았다.
@SpringBootApplication
@EnableJpaAuditing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
어라라 왜 잘되는거지?
이게 뭔지 한번 봐보기로 했다.
진짜 생전 처음들어보는 키워드이다.
JPA Auditing이 도대체 뭘까? 아니 그 전에 Auditing은 감사하다, 감시하다
라는 의미를 가진 단어였다. 그럼 JPA 에서 감사하거나 감시하는 그런 역할을 하는걸까? 라는 의문을 제기하게 되었다.
잘 찾아보니, DB에서 작업을 할 때 누가,언제
했는지 기록을 해야한다. 그런 기록을 하는것이 바로 JPA Auditing으로 조금 더 쉽게 할 수 있다.
그래서 왜 이를 알아야하나? 라는것을 의문을 품어야하는데, BaseEntity에 작성을 한 내용을 보면 알 수 있다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false, nullable = false)
private LocalDateTime created_at;
@LastModifiedDate
@Column(nullable = false)
private LocalDateTime updated_at;
}
여기에 보면 @EntityListeners(AuditingEntityListener.class) 를 추가했다. 이는 Auditing을 사용하겠다고 선언을 한 것인데, 이 한줄 추가한것만으로는 활성화
를 할 수 없다. 이를 활성화하기 위해서는 Enable을 해주어야 하는데, 이를 Application.java에 EnableJpaAuditing 어노테이션을 추가해주면 된다.