[JPA] @NotNull VS @Column(nullable = false)

반응형

JPA에서 NOTNULL 속성을 둘 중에 어떤 어노테이션으로 관리해야할지 고민이 있었다. 

둘을 공부해보자!


@NotNull

  • @Jakarata.validation의 어노테이션이다.
  • 하지만 Entity의 column에 달려있으면 hibernate가 인식하여 NotNull을 DDL에도 반영해준다.
    • 이때 NotNull을 DDL에 추가해주는 것은 JPA의 기본 동작이 아닌, hibernate의 작동 방식임

@Column(nullable = false)

  • jakarta.persistence의 어노테이션이다.
  • database column의 null 속성을 지정해주는 어노테이션으로 기본은 true이다.

@Column(nullable = false) vs @NotNull

공통점

  • DDL에 NOT NULL을 넣어준다.
  • Null을 넣으려고 하면 예외가 발생한다.

 

차이점

@Column(nullable = false)

  • DataIntegrityViolationException 
  • 실제 DB에 insert문이 실행이 되었을 때 예외가 발생한다.

@NotNull

  • ConstraintViolationException
  • hibernate가 flush()를 하는 시점에 유효성검증을 할 때 예외가 발생한다.

 

그렇다면 NotNull 을 사용해야할까 , @Column(nullable=false)를 사용해야할까?

 

나의 결론은 @NotNull을 사용하자는 결론을 내렸다.

 

이유는

1. DB까지 가기전, 빠르게 애플리케이션 레벨에서 검증하고, 예외를 처리할 수 있다.

2. DB(infra)의 schema에 의존하지 않고 business 단에서 처리하므로, DB 설정에 영향을 받지 않을 수 있다.

반응형