포디 Podi
또렷한 기억보다 글이 낫다
포디 Podi
  • 분류 전체보기 (83)
    • 책 (14)
      • 기록 (14)
      • 한줄 (0)
    • IT (62)
      • 기록 (61)
    • 일상 (5)
      • 음식 (0)
      • 기록 (5)
    • 게임 (0)
      • 몬스터헌터 (0)

블로그 메뉴

  • 홈으로
  • 방명록
  • 태그들
  • 깃허브
  • 유튜브
  • 인스타

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
포디 Podi

또렷한 기억보다 글이 낫다

[JPA] Entity  Validation - null
IT/기록

[JPA] Entity Validation - null

2022. 5. 31. 23:31
728x90

@NotNull 그리고 더 이상 사용되지 않는 @NotEmpty, @NotBlank 

구글에서 null 체크해주는 어노테이션을 찾아보면

@NotNull, @NotEmpty, @NotBlank이 나오는데 각 어노테이션 마다 허용해주는 범위는 아래와 같다,

@NotNull : null

@NotEmpty : null, ""

@NotBlank : null, "", " "(공백) 

 

하지만 @NotEmpty, @NotBlank은 Bean Validation 2.0부턴 더 이상 사용되지 않는다.

그렇기 때문에 Hibernate Validator 6.x이상 쓴다면 @NotEmpty, @NotBlank을 사용 할 수 없다.

deprecated 이전에는 @NotEmpty, @NotBlank에 @NotNull이 포함되어 있으므로  DDL을 생성할 때 열에 "not null"이 입력 되었다.

Jakatra Bean Validation(Bean Validation 2.0, JSR 380)부터는 @NotEmpty 및 @NotBlank에 @NotNull 주석이 포함되어 있지 않아 DDL을 생성 할 때 not null 제약 조건이 추가되지 않는다

 

만약 null, "", " "과 not null 제약 조건을 추가해야 한다면 

@NotNull, @Size을  해야한다

아래는 hibernate 문서 소스이다

public class Car {

   @NotNull
   private String manufacturer;

   @NotNull
   @Size(min = 2, max = 14)
   private String licensePlate;

   @Min(2)
   private int seatCount;

   // ...
}

 

DDL에 제약 조건 not null이 생성되게 하는 @Column(nullable = false)

javax.persistence Annotation @Column에 nullable=false 속성을 추가하면 @NotNull과 마찬 가지로 자동 생성되는 DDL에 제약 조건 not null이 생성된다.

@Entity
public class Item {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private BigDecimal price;
}

 

@NotNull과 @Column(nullable = false)

둘 다 데이터베이스에 null값을 저장하는 것을 방지하지만 서로 다른 접근 방식을 취하게 된다.

@Column(nullable = false)은 DB에 넘어간 뒤 예외가 발생하고

@NotNull은 Hibernate가 삽입 또는 수정 SQL 쿼리를 데이터베이스로 보내기 전에 유효성 검사가 수행된다.

그래서 일반적으로 @Column(nullable=false)보단 @NotNull 선호되는데

그 이유는 데이터베이스에서 유효성 검사 로직을 처리하지 않고 빈 유효성 검사에 정의된 표준 규칙에 의존하는 것이 좋기 때문이다.

 

다만, @NotNull로 데이터베이스 제약 조건을 거는 경우 주의해야 할 점이 있는데

hibernate.validator.apply_to_ddl 속성이 true로 되어야 @NotNull 주석이 데이터베이스 제약 조건으로 변환된다.

 

 

[참고]

[JPA] nullable=false와 @NotNull 비교, Hibernate Validation

javax-validation

hibernate-notnull-vs-nullable

Hibernate - Released under the ASL v2 Application layer agnostic validation

https://hibernate.atlassian.net/browse/HHH-14810

https://beanvalidation.org/3.0/

'IT > 기록' 카테고리의 다른 글

[Flutter] 첫 앱 게시 삽질기 #1 잘 게시 되길 바라며  (0) 2022.06.07
[Flutter] 화면 전환  (0) 2022.06.02
[Flutter] ColorScheme class - 주요 색상만 지정하면 색깔을 알아서 뚝딱?  (0) 2022.05.20
Spring Data JPA 간단하게 알아보기  (0) 2022.05.19
VSCODE 단축키  (0) 2022.05.19
    'IT/기록' 카테고리의 다른 글
    • [Flutter] 첫 앱 게시 삽질기 #1 잘 게시 되길 바라며
    • [Flutter] 화면 전환
    • [Flutter] ColorScheme class - 주요 색상만 지정하면 색깔을 알아서 뚝딱?
    • Spring Data JPA 간단하게 알아보기
    포디 Podi
    포디 Podi
    기록은 복리다

    티스토리툴바