@NotNull vs @Column(nullable = false)

Date:     Updated:

카테고리:

태그:

전에 프로젝트를 하면서 엔티티필드에 null을 검증하기 위해 @Column(nullable = false)을 사용했었다.
이번 프로젝트를 하면서 @NotNull과 @Column(nullable = false)의 차이는 무엇일까? 라는 생각이 들었다.

  • @Column(nullable = false)
    • JPA가 만든 엔티티의 필드 값이 null로 채워진 상태에서도 정상적으로 수행되다가
      데이터베이스 쪽으로 SQL 쿼리가 도착한 순간에 테이블 컬럼의 NOT NULL 옵션에 의해 예외가 발생된다.
  • @NotNull
    • 데이터베이스 쪽으로 SQL 쿼리가 보내지기 전에, 정확히는 JPA가 만든 엔티티의 필드 값이 null로 채워지는 순간에 예외가 던져진다. 즉 @NotNull 어노테이션이 @Column(nullable = false)보다 더 빠른 단계에서 같은 예외를 검출하므로 더 안전하다.

Hibernate가 해석하길 원하지 않는 경우 application.properties에 아래 옵션을 지정해주면 된다.

# application.properties
spring.jpa.properties.hibernate.validator.apply_to_ddl=false

JPA(Hibernate)를 이용한 Entity화 시킨게 아닌 객체라면 @NotNull 어노테이션을 해석하지 못한다.
어노테이션 자체는 주석일뿐 해석하는 주체에 따라 기능이 달라지는 어노테이션의 특성을 생각해보면 곧장 이해하기 수월하다.

Spring 카테고리 내 다른 글 보러가기

댓글남기기