JPA에서 엔티티 필드들의 타입은 어떻게 설정하는 것이 좋을까?

Minjae An·2024년 3월 2일
0

Spring data JPA

목록 보기
5/5

Primitive type vs Wrapper class

  • 기본 타입은 변수를 선언하면 스택에 데이터가 저장된다.
  • 래퍼 타입은 변수를 선언하면 실제 데이터는 힙 영역에 저장되고 JVM & GC의 관리를 받는다.
    • 스택에는 힙 영역의 주소를 가리키는 레퍼런스가 저장된다.
    • 변수는 데이터를 담는 것이 아닌 레퍼런스일 뿐이다.
    • 레퍼런스가 가지고 있는 값은 실제 데이터가 존재하는 힙 영역의 주소이다.
  • 결정적인 차이는 래퍼 타입은 null을 저장할 수 있다.
  • 따라서 NPE를 원천 차단하고자 한다면 기본 타입을 사용할 수 있다.

Why Use Wrapper to PK?

Hibernate의 공식 문서에는 기본 키와 같은 식별에 사용하는 속성에는 기본 타입을 사용하지 말 것을 권장하고 있다. int , long 과 같은 기본 타입은 0의 기본 값을 가지는데, 매핑된 값이 0일 때 실제 값이 0인 것인지 아니면 값이 아직 존재하지 않는 것인지 여부가 구별되지 않을 수 있다. 따라서 데이터가 존재하지 않는다면 null 을 통해 표현하는 것이 Hibernate에서 권장하는 방식이다.

엔티티의 필드에는 어떤 타입을?

  • not null 제약조건이 필수로 걸리는 경우 기본 타입을 사용한다.
    • 심지어 기본 타입에 @Column 을 생략하면 JPA가 테이블 생성시 not null 을 자동으로 추가해준다.
  • null 을 허용해야 하면 래퍼를 사용한다.

참고

profile
도전을 성과로

0개의 댓글