728x90
- 임베디드 타입
- 새로운 값 타입을 직접 정의할 수 있음
- JPA는 임베디드 타입이라고 함.
- 주로 기본 값 타입을 모아서 복합값 타입이라고도 함.
- int, String과 같은 값 타입
- 재사용이 가능하며 높은 응집도
- Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소드를 만들 수 있음
- 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 Entity에 생명주기를 의존함
Member
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
// 기간
@Embedded // Period의 @Embeddable 둘 중 하나만 사용해도 무관
private Period workPeriod;
// 주소
@Embedded
private Address homeAddress;
}
Period
@Embeddable
public class Period {
private LocalDateTime startDate;
private LocalDateTime endDate;
public Period() {
}
}
Address
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
// 기본 생성자 필수
public Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
실행결과
Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(new Address("city","street","10"));
member.setWorkPeriod(new Period());
em.persist(member);
// 실행결과
Hibernate:
create table member (
member_id bigint not null,
city varchar(255),
street varchar(255),
zipcode varchar(255),
username varchar(255),
end_date timestamp,
start_date timestamp,
primary key (member_id)
)
Hibernate:
insert
into
member
(city, street, zipcode, username, end_date, start_date, member_id)
values
(?, ?, ?, ?, ?, ?, ?)
결과
반복적으로 사용되는 것을 따로 분리했기 때문에 좀 더 객체지향으로 설계가 가능하다.
출처 : Java 표준 ORM JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
객체지향 쿼리 소개(feat. JPQL) (0) | 2022.06.14 |
---|---|
지연 로딩(Lazy Loading) - feat. 프록시 (0) | 2022.06.14 |
@MappedSuperclass (0) | 2022.06.13 |
다대일 양방향 [N:1, 1:N] 관계 (0) | 2022.06.13 |
연관관계 편의 메소드 작성 시 주의사항(part.2) (0) | 2022.06.12 |