
참고
값 타입 컬렉션

- 값 타입을 하나 이상 저장할 때 사용
- @ElementCollection, @CollectionTable 사용
- 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다.
- 컬렉션을 저장하기 위한 별도의 테이블이 필요함
값 타입 컬렉션 사용
- 값 타입 저장 예제
- member만 영속화해도 나머지 컬렉션 값타입이 자동으로 저장이 된다.
- 값타입조회예제
- 값 타입 수정 예제
- 해당되는 데이터를 다 지우고 기존에 컬렉션에 남아있는 데이터를 다시 insert한다.
- primitive type같은 경우는 update query가 나간다.
참고: 값 타입 컬렉션은 영속성 전에(Cascade) + 고아 객체 제 거 기능을 필수로 가진다고 볼 수 있다.
값 타입 컬렉션의 제약사항
- 값 타입은 엔티티와 다르게 식별자 개념이 없다.
- 값은 변경하면 추적이 어렵다.
- 값 타입 컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.
- 값 타입 컬렉션을 매핑하는 테이블은 모든 컬럼을 묶어서 기본 키를 구성해야 함: null 입력X, 중복 저장X
값 타입 컬렉션 대안
- 실무에서는 상황에 따라 값 타입 컬렉션 대신에 일대다 관계를 고려
- 일대다 관계를 위한 엔티티를 만들고, 여기에서 값 타입을 사용
- 영속성 전이(Cascade) + 고아 객체 제거를 사용해서 값 타입 컬 렉션 처럼 사용
- EX) AddressEntity
실무에서는 일대다 관계를 많이 사용한다. 값 타입 컬렉션을 쓸 때는 업데이트가 필요없을때
그 때 사용하곤 한다.
정리
- 엔티티 타입의 특징
- 값타입의특징
- 식별자X
- 생명 주기를 엔티티에 의존
- 공유하지 않는 것이 안전(복사해서 사용)
- 불변객체로만드는것이 안전