임베디드 타입
임베디드 타입 =>공통으로 관리 가능하다. 용어와 코드 공통화된다! 도메인의 언어를 공통적으로 사용할 수 있는 부분이 더 많아진다!
새로운 값 타입을 직접 정의할 수 있음
JPA는 임베디드 타입(embedded type)이라 함
주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함
int, String과 같은 값 타입
기존 회원 엔티티 : 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호
임베디드 타입으로 정의한 회원 엔티티 : 이름, 근무 기간, 집 주소
임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null ex) Address homeAddress = null; 이면 Addreess의 필드(컬럼)들 모두 null이다.
임베디드 타입 사용법
@Embeddable: 값 타입을 정의하는 곳에 표시
@Embedded : 값 타입을 사용하는 곳에 표시
기본 생성자 필수 //JPA가 동적으로 객체 생성해서 처리를 하나봄.
임베디드 타입의 장점
재사용
높은 응집도
Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소드를 만들 수 있음
임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명주기에 의존함
임베디드 타입과 테이블 매핑
임베디드 타입은 엔티티의 값일 뿐이다.
임베디드 타입 사용 전 후에 매핑하는 테이블은 같음.
객체와 테이블을 아주 세밀하게(find-grained) 매핑 가능
잘 설계한 ORM(Object Relation Mapping) 애플리케이션은 매핑한 테이블의 수<클래스 수
임베디드 타입과 연관관계 값 타입(임베디드 타입) 안에 엔티티가 들어갈 수 있다!!!
@AttributeOverride
한 엔티티에서 같은 임베디드 값 타입을 사용하려면 컬럼명이 중복되버린다! ex) 집 주소, 회사 주소 =>@AttributeOverride: 속성 재정의
값 타입의 필드(컬럼)가 하나면 @AttributeOverride, 여러개면 @AttributeOverrides 사용해서 컬럼명 속성을 재정의한다!
Last updated