BaseEntity 적용 시 NULL값 들어감

nGyu·2022년 2월 20일
3

트러블슈팅

목록 보기
3/3

처음 BaseEntity를 만들어 created_at 과 updated_at을 넣어보려고 했다.
그런데 이상하게 자꾸만 두 컬럼에 null값이 들어가 뭐가 문제인지 찾기 시작했다.


nullable=false 추가

@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를 넣어보았다.

결과는 당연하게도 오류가 생겼다..

@EnableJpaAuditing

진짜 뭐가 문제인지 전혀 몰랐다.
다른 사람들은 BaseEntity를 어떻게 작성을 했는지 찾아보았는데 나랑 별 다를게 없었다.

그래서 한번 다른 글을 읽어보며 뭐가 문제인지 천천히 찾아보았다.
찾다보니 계속해서 나오는 키워드는 EnableJpaAuditing 이것이었다.
Application 실행하는 제일 최 상단에 붙혀주라던데 이게 도대체 뭘까?
일단 한번 붙혀보았다.

@SpringBootApplication
@EnableJpaAuditing
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

어라라 왜 잘되는거지?
이게 뭔지 한번 봐보기로 했다.

JPA Auditing

진짜 생전 처음들어보는 키워드이다.
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 어노테이션을 추가해주면 된다.

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글