값 타입을 하나 이상 저장할 때 사용
데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다.
컬렉션을 저장하기 위한 별도의 테이블이 필요함
@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. 값 타입 컬렉션 대안
실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려
일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용
'JAVA > SpringBoot' 카테고리의 다른 글
[Querydsl] QueryDsl SpringBoot 버전 별 gradle 설정 (1) | 2023.11.24 |
---|---|
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 9. @Embedable, @Embedded, @AttributeOverrides (0) | 2023.11.05 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. cascade, orphanRemoval (0) | 2023.11.01 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. 즉시로딩과 지연로딩 (0) | 2023.10.31 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. 프록시 (0) | 2023.10.31 |