예를 들어, 회원 엔티티는 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호를 가진다고 가정할 때,
엔티티를 이렇게 구성될 것이다.
Period, Address의 구성은 아래와 같다.
Member는 Period, Address를 가지고 있다.
@Embeddable
public class Period {
private LocalDateTime startDate;
private LocalDateTime endDate;
}
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
@Entity
public class Member extends BaseEntity {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String name;
// 기간
@Embedded
private Period workPeriod;
// private LocalDateTime startDate;
// private LocalDateTime endDate;
// 주소
@Embedded
private Address homeAddress;
// private String city;
// private String street;
// private String zipcode;
}
임베디드 타입을 사용함으로써 재사용성과 높은 응집도 측면에서 장점을 가져갈 수 있다.
임베디드 타입을 구성했다고 해서, 테이블이 변경되거나 하지는 않는다.
한 엔티티에서 같은 값 타입을 사용해서 중복될때는, @AttributeOverrides, @AttributeOverride를 사용해서 컬럼명을 재정의한다.
@Entity
public class Member {
// 주소
@Embedded
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city",
column = @Column(name = "WORK_CITY")),
@AttributeOverride(name = "street",
column = @Column(name = "WORK_STREET")),
@AttributeOverride(name = "zipcode",
column = @Column(name = "WORK_ZIPCODE"))
})
private Address workAddress;
}
데이터 삽입
예시)
Member member = new Member();
member.setName("member1");
member.setHomeAddress(new Address("homeCity", "street", "10000"));