본문 바로가기
JAVA/SpringBoot

[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 9. @ElementCollection, @CollectionTable

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

 

(요약)

값 타입 컬렉션을 사용하기보다는 실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려
일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용

 

 

소스코드 예제

 

1. private Set<String> favoriteFoods = new HashSet<>();

@Column 선언 가능
=> Set의 값타입으로 String 하나라서 

 

2. private List<Address> addressHistory = new ArrayList<>();

=> @JoinColumn으로 선언된 키값과, Address 에 선언되어있는 필드들이 생성됨을 확인

 

3. 비즈니스 로직 예제

==> 값타입을 따로 persist를 하지 않아도 영속성 컨텍스트에 저장됨을 확인 ( Life Cycle이 함께 진행됨 )

==> 컬렉션이므로 Default: 지연로딩 전략으로 지정되어있음

 

 

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

(주의사항) 값 타입 컬렉션에 변경 사항이 발생하면
주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.

 

5. 값 타입 컬렉션 대안

실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려
일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용