@NotNull vs @Column(nullable = false)
카테고리: Spring
전에 프로젝트를 하면서 엔티티필드에 null을 검증하기 위해 @Column(nullable = false)을 사용했었다.
이번 프로젝트를 하면서 @NotNull과 @Column(nullable = false)의 차이는 무엇일까? 라는 생각이 들었다.
- @Column(nullable = false)
- JPA가 만든 엔티티의 필드 값이 null로 채워진 상태에서도 정상적으로 수행되다가
데이터베이스 쪽으로 SQL 쿼리가 도착한 순간에 테이블 컬럼의 NOT NULL 옵션에 의해 예외가 발생된다.
- JPA가 만든 엔티티의 필드 값이 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 어노테이션을 해석하지 못한다.
어노테이션 자체는 주석일뿐 해석하는 주체에 따라 기능이 달라지는 어노테이션의 특성을 생각해보면 곧장 이해하기 수월하다.
댓글남기기