Backend/Spring Boot

[자바 ORM 표준 JPA 프로그래밍] 9장

lim.dev 2023. 5. 23. 23:26

값 타입

  • 기본 값 타입
    • 자바 기본 타입
    • 래퍼 클래스
    • String
  • 임베디드 타입 (복합 값 타입)
  • 컬렉션 값 타입

 

기본 값 타입

자바가 제공하는 기본 데이터 타입

기본 타입은 절대 공유되지 않으며, a=b로 선언 시 b의 값을 복사해서 a에 넣음

 

임베디드 타입 (복합 값 타입)

JPA에서 사용자가 직접 정의한 값 타입

임베디드 타입도 int, String처럼 값 타입임

하이버네이트는 임베디드 타입을 컴포넌트라 함

 

컬렉션 값 타입

하나 이상의 값 타입을 저장할 때 사용

값 타입 컬렉션은 영속성 전이 + 고아 객체 제거 기능을 필수로 가짐

 

 

엔티티 타입의 특징

  • 식별자가 있음
    • 엔티티 타입은 식별자가 있고 식별자로 구분할 수 있음
  • 생명 주기가 있음
    • 생성하고 영속화하고 소멸하는 생명 주기가 있음
    • em.persist()로 영속화
    • em.remove()로 제거
  • 공유할 수 있음
    • 참조 값을 공유할 수 있음 = 공유 참조
    • 다른 엔티티에서 얼마든지 회원 엔티티를 참조할 수 있음

 

값 타입의 특징

  • 식별자가 없음
  • 생명 주기를 엔티티에 의존
    • 스스로 생명주기를 가지지 않고 엔티티에 의존 
    • 의존하는 엔티티를 제거하면 같이 제거됨
  • 공유하지 않는 것이 안전
    • 엔티티 타입과는 다르게 공유하지 않는 것이 안전 -> 값을 복사해서 사용
    • 오직 하나의 주인만이 관리
    • 불변 객체로 만드는 것이 안전