Embedded Type
직접 정의해서 사용하는 타입
@Embeddable
: 값 타입을 정의하는 곳@Embedded
: 값 타입을 사용하는 곳@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Embedded
private Address address;
}
@Embeddable
public class Address {
private String address1;
private String address2;
private String address3;
public Address() {
}
public Address(String address1, String address2, String address3) {
this.address1 = address1;
this.address2 = address2;
this.address3 = address3;
}
}
엔티티와 임베디드 타입 관계는 UML 상에서는 컴포지션(composition) 관계임.
(hibernate는 임베디드 타입을 컴포넌트(components)라고 함.)
+) 임베디드 타입은 기본 생성자를 필수적으로 요구하므로 사용하지 않아도 추가해야 함.
Composition & Component
임베디드 타입은 엔티티의 값일 뿐임.
-> 값이 속한 엔티티의 테이블에 매핑함. (임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같음.)
임베디드 타입은 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능함.
https://gist.github.com/taekwon-dev/707fc153a45c2281b1609c03a0b1c934
https://velog.io/@conatuseus/JPA-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%ED%83%80%EC%9E%85embedded-type-8ak3ygq8wo
https://velog.io/@vino661/%EC%83%81%EC%86%8D%EA%B3%BC-%EC%BB%B4%ED%8F%AC%EC%A7%80%EC%85%98%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C#%EC%83%81%EC%86%8Dinheritance%EA%B3%BC-%EC%BB%B4%ED%8F%AC%EC%A7%80%EC%85%98composition