springboot

[JPA] @NotNull vs nullable = false

주다애 2023. 8. 13. 23:42

🎈 @NotNull vs nullable = false 은 무슨 차이가 있나?

 

유효성 검사를 프로젝트에 추가하려다가 코드를 보니,

@Column(nullable = false, length = 20, name = "name")
private String name;

위의 코드를 발견했다. @Column 어노테이션의 nullable 속성이 false로 되어있다.

프로젝트를 실행하면

이렇게 not null의 조건이 붙은채 테이블이 생성된다.

해당 필드를 @NotNull을 붙여서 변경해보자

 

@NotNull
private String name;

@PostMapping("/user")
public void saveUser(@Valid @RequestBody UserCreateRequest request) {
    userService.saveUser(request);
}

@Valid 어노테이션을 추가해주었다. 위의 코드도 마찬가지로 not null의 조건을 붙여서 테이블을 만들어준다.

그럼 뭐가 다르지?

 

@Column(nullable = false)는 엔티티의 필드가 null이어도 정상 작동을 하다가, DB로 쿼리가 도착할 때 예외가 발생한다.

@NotNull은 엔티티의 필드가 null이면 그 순간 예외가 발생한다.

즉, @NotNull이 더 빨리 예외를 캐치해서 발생시키는 것이다.