JPA

임베디드 타입(Embedded Type)

dev-rootable 2023. 8. 18. 15:25

📌 임베디드 타입(Embedded Type)이란

 

주로 기본 값 타입을 모아서 새로운 값 타입을 직접 정의하는 것을 말하며, 복합 값 타입이라고도 한다.

 

임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 Entity에 생명 주기를 의존한다.

 

🔎 예제

 

Member 엔티티

 

Member 엔티티에서 날짜와 관련된 속성, 주소와 관련된 속성처럼 특정 주제와 관련된 값 타입들을 묶어 새로운 값 타입을 정의할 수 있다.

 

값 타입 그룹핑

 

📌 사용 방법

 

사용할 곳에는 @Embedded - 변경 전(좌), 변경 후(우)

 

정의할 곳에는 @Embeddable

 

임베디드 타입도 Proxy를 사용하기 때문에 기본 생성자가 필요하다.

 

 

Member 생성

 

DB 저장 결과

 

📌 장점

 

  1. 재사용 가능
  2. 높은 응집도
  3. Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메서드를 만들 수 있음
  4. 임베디드 타입은 값 타입과 엔티티 타입 모두 포함할 수 있다.

 

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

 

DB 입장에선 임베디드 타입을 사용한다고 해서 바뀌는 것이 전혀 없다.

 

테이블 매핑

 

임베디드 타입은 엔티티의 값일 뿐이다. 그래서 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.

 

🔎 속성 재정의

 

만약 한 Entity에서 같은 값 타입을 사용한다면 어떤 문제가 발생할까

 

집 주소와 직장 주소

 

컬럼 중복으로 에러가 발생한다

 

이때, @AttributeOverride, @AttributeOverrides를 통해 컬럼명 속성을 재정의하여 해결할 수 있다.

 

컬럼명 속성 재정의

 

컬럼 중복 제거

 

참고로 임베디드 타입 값이 널이면 매핑한 컬럼 값은 모두 널이 된다.

 

Reference:

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자

www.inflearn.com