본문 바로가기
정리/DB

JPA(3) - 값타입

by Hudini30 2022. 4. 15.

엔티티 타입

@Entity로 정의하는 객체

데이터가 변해도 시결자로 지속해서 추적 가능

식별자 있음/생명주기관리/ 공유

값타입

단순히 값으로 사용하는 자바 기본타입이나 객체

식별자가 없고 값만 있으므로 변경시 추적 불가 - 임베디드 타입 값타입을 여러 엔티티에서 공유하면 위험. 대신 값을 복사해서 사용.

값 타입은 불변 객체로 설계하는 것을 추천

생명주기를 엔티티의 의존

값 타입은 공유하면 안됨

값 타입 컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에있는 현재 값을 모두 다시 저장한다. 값 타입 컬렉션을 매핑하는 테이블은 몯느 컬럼을 묶어서 기본 키를 구성해야 함.

 

기본값 타입

- 자바 기본  타입(int, double)

- 래퍼 클래스(Integer, Long)

- String

 

임베디드  타입(embedded type, 복합 값 타입)

엔티티의 값일뿐이고, 전과 후에 매핑하는 테이블은 같다.

객체와 테이블을 아주 세밀하게 매핑하는 것이 가능

@Embeddable : 값 타입을 정의하는곳

@Embedded : 값 타입을 사용하는곳

한 엔티티에서 같은 값타입을 사용할 경우

@AttributeOverride/@AttributeOverrides : 속성 재정의

 

컬렉션 값 타입(collection value type)

단순할 때 사용 추천

값 타입을 하나 이상 저장할 때 사용

컬렉션을 저장하기 위한 별도의 테이블이 필요

지연로딩

@OneToMany에 casecade도 적용한거라 볼 수 있음

@ElementCollection @CollectionTable(name="테이블명", joinColums=@JoinColumn(name="조인컬럼"))

'정리 > DB' 카테고리의 다른 글

MyBatis FETCH SIZE에 대해  (0) 2022.08.17
JPA (2) - 기능 정리  (0) 2022.04.11
JPA (1) - JPA? ORM?  (0) 2022.03.16

댓글