JPA
임베디드 타입(Embedded Type)
dev-rootable
2023. 8. 18. 15:25
📌 임베디드 타입(Embedded Type)이란
주로 기본 값 타입을 모아서 새로운 값 타입을 직접 정의하는 것을 말하며, 복합 값 타입이라고도 한다.
임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 Entity에 생명 주기를 의존한다.
🔎 예제
Member 엔티티에서 날짜와 관련된 속성, 주소와 관련된 속성처럼 특정 주제와 관련된 값 타입들을 묶어 새로운 값 타입을 정의할 수 있다.
📌 사용 방법
임베디드 타입도 Proxy를 사용하기 때문에 기본 생성자가 필요하다.
📌 장점
- 재사용 가능
- 높은 응집도
- Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메서드를 만들 수 있음
- 임베디드 타입은 값 타입과 엔티티 타입 모두 포함할 수 있다.
📌 임베디드 타입과 테이블 매핑
DB 입장에선 임베디드 타입을 사용한다고 해서 바뀌는 것이 전혀 없다.
임베디드 타입은 엔티티의 값일 뿐이다. 그래서 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
🔎 속성 재정의
만약 한 Entity에서 같은 값 타입을 사용한다면 어떤 문제가 발생할까
이때, @AttributeOverride, @AttributeOverrides를 통해 컬럼명 속성을 재정의하여 해결할 수 있다.
참고로 임베디드 타입 값이 널이면 매핑한 컬럼 값은 모두 널이 된다.
Reference:
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard