[자바 ORM 표준 JPA 프로그래밍 - 기본편]
섹션 9.값타입- 값타입과 불변 객체 ~ 실전 예제6- 값 타입 매핑
값 타입 공유 참조
- 임베디트 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험. side effect 발생. -> 대신 값을 복사해서 사용.
- 직접 정의한 값 타입은 자바의 기본 타입이 아닌 객체 타입.
불변 객체
- 불변 객체: 생성 시점 이후 절대 값을 변경할 수 없는 객체.
- 객체 타입을 수정할 수 없게 만들면 side effect 원천 차단.
①생성자로만 값을 설정하고 수정자(setter)를 만들지 않음.
②private로 설정.
값 타입 컬렉션
- 값 타입을 하나 이상 저장할 때(컬렉션을 저장할 때) 사용.
- @ElementCollection, @CollectionTable 사용.
- 데이터베이스는 컬렉션을 저장하기 위한 별도의 테이블이 필요.(일대다 관계처럼 외래키로 연결.)
값 타입 컬렉션 사용
- 값 타입 컬렉션은 CascadeType.ALL+orphanRemoval=true 기능과 유사하게 라이프사이클이 엔티티에 의존.
- 값 타입 조회시 지연 로딩 전략 사용.
- 제약사항: ①값 타입은 엔티티와 달리 식별자 개념이 없어 변경시 추적이 어려움. => 값 타입 컬렉션에 변경사항이 발생하면 주인 엔티티와 연관된 모든 데이터를 삭제하고, 남아있는 값을 다시 저장. ② 모든 컬럼을 묶어서 기본 키 구성.(null 입력x, 중복 저장x.)
- 실무에서는 값 타입 컬렉션 대신 일대다 관계를 위한 엔티티를 만들어 사용. (값 타입을 엔티티로 승격.)
- 식별자가 필요하고, 지속해서 값을 추적 및 변경해야 한다면 값 타입이 아닌 엔티티로 사용.
식별자 | 생명주기 관리 | 공유 | |
엔티티 타입 | O | O | O |
값 타입 | X | X. 생명주기를 엔티티에 의존. | X. 공유하지 않는 것이 안전. 복사해서 사용. |
'공부일기 > JPA' 카테고리의 다른 글
JPA 공부일기(14) (0) | 2023.03.27 |
---|---|
JPA 공부일기(13) (0) | 2023.03.26 |
JPA 공부일기(11) (0) | 2023.03.20 |
JPA 공부일기(10) (0) | 2023.02.09 |
JPA 공부일기(9) (0) | 2023.01.30 |
댓글