임베디드 타입

임베디드 타입 =>공통으로 관리 가능하다. 용어와 코드 공통화된다! 도메인의 언어를 공통적으로 사용할 수 있는 부분이 더 많아진다!

  • 새로운 값 타입을 직접 정의할 수 있음

  • JPA는 임베디드 타입(embedded type)이라 함

  • 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함

  • int, String과 같은 값 타입

  • 기존 회원 엔티티 : 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호

  • 임베디드 타입으로 정의한 회원 엔티티 : 이름, 근무 기간, 집 주소

  • 임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null ex) Address homeAddress = null; 이면 Addreess의 필드(컬럼)들 모두 null이다.

임베디드 타입 사용법

  1. @Embeddable: 값 타입을 정의하는 곳에 표시

  2. @Embedded : 값 타입을 사용하는 곳에 표시

  3. 기본 생성자 필수 //JPA가 동적으로 객체 생성해서 처리를 하나봄.

임베디드 타입의 장점

  • 재사용

  • 높은 응집도

  • Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소드를 만들 수 있음

  • 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명주기에 의존

임베디드 타입과 테이블 매핑

  • 임베디드 타입은 엔티티의 값일 뿐이다.

  • 임베디드 타입 사용 전 후에 매핑하는 테이블은 같음.

  • 객체와 테이블을 아주 세밀하게(find-grained) 매핑 가능

  • 잘 설계한 ORM(Object Relation Mapping) 애플리케이션은 매핑한 테이블의 수<클래스 수

임베디드 타입과 연관관계 값 타입(임베디드 타입) 안에 엔티티가 들어갈 수 있다!!!

@AttributeOverride

한 엔티티에서 같은 임베디드 값 타입을 사용하려면 컬럼명이 중복되버린다! ex) 집 주소, 회사 주소 =>@AttributeOverride: 속성 재정의

값 타입의 필드(컬럼)가 하나면 @AttributeOverride, 여러개면 @AttributeOverrides 사용해서 컬럼명 속성을 재정의한다!

Last updated