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 |