임베디드 타입 (복합값 타입) (내장 타입)
-새로운 갑 타입을 직접 정의할 수 있다.
-JPA는 임베디드 타입(EmbaddedType) 라고 한다.
-주로 기본값 타입을 모아서 만들어서 복합값 타입이라고도 한다,
-int , String같은 값타입들을 모아서 만든다.
-엔티티가 아니라 그냥 "값" 이라 추적도 안되고 변경하면 끝이다. (하드코딩 값과 같음)
ex) 회원 엔티티는 이름 , 근무시작일, 근무종료일 , 주소도시 , 주소번지 , 주소우편번호를 가진다.
{Member}
-id
-name
-startDate
-endDate
-city
-street
-zipCode
// 여기서 시작일, 종료일이 형식이 같고 , 도시주소 , 주소번지 ,주소 우편번호 등도 비슷한 형태이며 여기저기서 사용된다.
그래서 위같이 형태가 비슷하고 여기저기서 사용되는 값을 묶어줄수 있다
그것이 임베디드 타입이다.
{Member (entity)}
-id : Long (레퍼 타입이라 값이 변해도 주소값이 남음)
-name : String
-workPeriod : period
-workAddress : address
여기서 Period 와 Address 는 따로 정의한 임베디드 타입이다.
{Member (entity)}
-id : long
-name : String
-workPeriod : period
-workAddress : address
{period (valueType)}
startDate : date
endDate : date
{address (valueType)}
city : String
street : String
zipCode : String
임베디드로 사용할 클래스를 새로 만든것으로
문제는 이 클래스를 JPA 엔티티에서 필드값으로 사용하는 방법이다.
@Embeddable : 값 타입을 정의하는 곳(클래스)에 표시
@Embedded : 값타입을 사용하는곳(엔티티)에 표시
*기본생성자가 필수적으로 필요하다.
임베디드 타입의 장점
-재사용이 가능하다
-높은 응집도
-period.isWork 처럼 해당 값타입만 사용하는 의미있는 메소드를 만들수 있다.
-임베디드 타입을 포함한 모든 값타입은 값타입을 소유한 엔티티에 생명주기에 의존한다.
(임베디드를 가진 엔티티가 없어지면 임베디드 필드도 사라져서 추적이 불가능하다. 임베디드도 결국은 그냥 값, 레퍼 처럼 주소값을 받는게 아니다)
'JPA' 카테고리의 다른 글
2월 3일 JPA 임베디드 타입class와 테이블을 매핑 (0) | 2023.02.03 |
---|---|
2월 2일 JPA cascade 의 종류 (0) | 2023.02.03 |
2월 3일 JPA 값타입 (0) | 2023.02.03 |
2월 3일 JPA 실전예제 5.연관관계 관리 (0) | 2023.02.03 |
2월 2일 JPA 영속성 전이 CASCADE (0) | 2023.02.02 |