백엔드/Spring

[Spring] JPA 값 타입

kwang2134 2024. 9. 12. 08:06
728x90
반응형
728x90

JPA 값 타입

  • 엔티티가 아닌 단순히 값으로 표현되는 객체 
  • 주로 엔티티의 필드로 사용되며 엔티티가 소유하는 값 또는 속성을 나타냄

기본 값 타입 

  • 자바의 원시 타입, 래퍼 클래스, String에 해당하는 값
  • 값의 생명주기를 엔티티에 의존함
  • 기본 값 타입은 항상 값을 복사하여 공유하지 않음

임베디드 타입 (Embedded)

  • 복합적인 여러 속성을 하나의 객체로 묶어 관리
  • 기본 값 타입들을 모아서 만든 타입
  • 객체를 필드 값으로 가지나 데이터베이스 테이블 상에선 임베디드 타입 내부 필드 값이 엔티티에 추가되어 있음
  • @AttributeOverride를 사용하여 같은 값 타입을 사용하는 경우 이름을 다르게 설정 가능
  • 사용법
    • @Embeddable: 값 타입을 정의하는 곳에 표시, 임베디드 타입의 클래스에 정의
    • @Embedded: 값 타입을 사용하는 곳에 표시, 임베디드 타입을 사용하는 필드에 정의
    • 기본 생성자 필수
  • 장점
    • 여러 관련 속성을 하나의 객체로 묶어서 논리적으로 그룹화 가능
    • 응집도가 높고 재사용 가능
    • 도메인 모델을 보다 명확하고 직관적으로 표현
  • 단점
    • 값 타입에 대한 구조 변경 시 이를 사용하는 모든 엔티티에 영향을 미침 -> 객체의 형태로 참조되어 생기는 문제
    • 너무 많은 값을 임베디드 타입으로 사용하면 엔티티가 복잡해 짐

값 타입 컬렉션

  • 값 타입을 하나 이상 저장할 때 사용
  • @ElementCollection, @CollectionTable 사용
  • 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없음 -> 다른 테이블 필요
  • 장점
    • 컬렉션 타입의 값들을 하나의 엔티티에 포함시켜서 관리할 수 있음
    • 다수의 값을 하나의 엔티티에 그룹화하여 직관적으로 표현
  • 단점
    • 값 타입은 엔티티와 다르게 식별자 개념이 없어 변경 추적이 어려움
    • 변경 발생 시 주인 엔티티와 연관된 모든 데이터를 삭제하고 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장
    • 값 타입 컬렉션을 매핑하는 테이블은 모든 컬럼을 묶어서 기본 키를 구성해야 함

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 | 김영한 - 인프런 (inflearn.com) 강의 내용 참고

728x90

'백엔드 > Spring' 카테고리의 다른 글

[Spring] API  (0) 2024.09.19
[Spring] JPA - JPQL(Java Persistence Query Language)  (1) 2024.09.13
[Spring] JPA 프록시  (0) 2024.09.11
[Spring] 연관관계 매핑  (0) 2024.09.10
[Spring] JPA 엔티티 매핑  (0) 2024.09.09