본문 바로가기
공부일기/JPA

JPA 공부일기(12)

by 고다나 2023. 3. 21.
[자바 ORM 표준 JPA 프로그래밍 - 기본편]
섹션 9.값타입- 값타입과 불변 객체 ~ 실전 예제6- 값 타입 매핑

 

값 타입 공유 참조

- 임베디트 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험. side effect 발생. -> 대신 값을 복사해서 사용.

- 직접 정의한 값 타입은 자바의 기본 타입이 아닌 객체 타입

 

출처: 김영한님의 자료 09. 값 타입

 

불변 객체

- 불변 객체: 생성 시점 이후 절대 값을 변경할 수 없는 객체.

- 객체 타입을 수정할 수 없게 만들면 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

댓글