요약
@NotNull을 쓰자! -> 일정 버전 이후에는 @NonNull 사용해야하는듯
@Id, 연관관계 매핑키에는 안써도 되는듯..?
참고하기 좋은 사이트 - 🔗@Valid 를 이용해 @RequestBody 객체 검증하기
장점
@NotBlank와 @NotEmpty는 not null 옵션이 없다. 따라서 일반적으로 사용하지 않는 것이 좋다.
만약 JPA의 DDL 자동생성을 사용하지 않지만, 엔티티의 값을 검증하고 싶다면 문자열에 한해서는 @NotBlank와 @NotEmpty가 유리할 수 있다.
(예 : flyway를 이용해 DB 쿼리를 관리해서 DDL 자동 생성을 쓰지 않는 경우)
@Column 속성을 이용한 @Column(nullable=false)는 DDL 생성시에 not null 이라는 조건이 붙은 채로 생성된다. @NotNull과 기능은 비슷하나 @NotNull를 추천한다.
@NotNull 어노테이션을 쓰면, 데이터베이스에 SQL 쿼리를 보내기 전에 예외가 발생한다.
JPA의 Repository 인터페이스가 잘못된 Entity를 저장할 때, ConstraintViolationException을 발생시킨다.
(그 때문에, @Valid나 @Validated 없이도 엔티티를 자연스럽게 검증할 수 있다)
그러나 nullable=false 로 @Column 어노테이션에 속성을 붙이면,
null을 넣은 엔티티를 생성하면 생성이 된 뒤 Repository에 전달되고,
이 값이 DB에 넘어간 뒤에 예외가 발생해 위험한 오류를 맞을 수 있다.
참고
[JPA] nullable=false와 @NotNull 비교, Hibernate Validation
@NotNull vs @Column(nullable=false)
[JPA] nullable=false와 @NotNull 비교, Hibernate Validation