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 |