article thumbnail image
Published 2022. 7. 7. 01:40

1. 값 타입 컬렉션

• 값 타입을 하나 이상 저장할 때 사용
• @ElementCollection, @CollectionTable 사용
• 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다. 
• 컬렉션을 저장하기 위한 별도의 테이블이 필요함

 

 

2. 값 타입 컬렉션 사용

• 값 타입 저장 예제


• 값 타입 조회 예제 - 값 타입 컬렉션도 지연 로딩 전략 사용


• 값 타입 수정 예제


• 참고: 값 타입 컬렉션은 영속성 전에(Cascade) + 고아 객체 제거 기능을 필수로 가진다고 볼 수 있다

 

 

3. 값 타입 컬렉션의 제약사항

• 값 타입은 엔티티와 다르게 식별자 개념이 없다. 
• 값은 변경하면 추적이 어렵다. 
• 값 타입 컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다. 
• 값 타입 컬렉션을 매핑하는 테이블은 모든 컬럼을 묶어서 기본키를 구성해야 함: null 입력X, 중복 저장X

 

 

4. 값 타입 컬렉션 대안

• 실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려
• 일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용
• 영속성 전이(Cascade) + 고아 객체 제거를 사용해서 값 타입 컬렉션 처럼 사용
• EX) AddressEntity

 

 

 

5. 정리

엔티티 타입의 특징
• 식별자O 
• 생명 주기 관리
• 공유

 
값 타입의 특징
• 식별자X 
• 생명 주기를 엔티티에 의존
• 공유하지 않는 것이 안전(복사해서 사용) 
• 불변 객체로 만드는 것이 안전

 

 

 

 

출처 : 김영한, 자바 ORM 표준 JPA 프로그래밍 - 기본편

'JPA' 카테고리의 다른 글

객체지향 쿼리 언어 소개  (0) 2022.07.07
실전 예제 - 6. 값 타입 매핑  (0) 2022.07.07
값 타입의 비교  (0) 2022.07.06
값 타입과 불변 객체  (0) 2022.07.06
임베디드 타입(복합 값 타입)  (0) 2022.07.06
복사했습니다!