@Embedded (임베디드 타입)
임베디드 타입이란 새로운 타입을 사용자가 직접 정의하여 사용하는 것을 뜻한다.
이는 int, String처럼 값 타입이다.
임베디드 타입을 사용하지 않는 Member
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Temporal(TemporalType.DATE)
Date startDate;
@Temporal(TemporalType.DATE)
Date endDate;
private String city;
private String zipcode;
}
위와 같이 상세한 데이터를 모두 가지고 있는 것은 객체지향적이지 않고 효율적이지 못하다.
이를 근무 기간, 주소 타입이 있다면 가독성도 높아지고 명확한 의미를 나타낼 수 있다.
이를 위해 임베디드 타입을 사용하는 것이다.
임베디드 타입 정의
@Embeddable
public class Peroid {
@Temporal(TemporalType.DATE)
Date startDate;
@Temporal(TemporalType/Date)
Date endDate;
public boolean isWork (Date date) {
// .. 값 타입을 위한 메서드를 정의할 수 있다
}
}
@Embeddable
public class Address {
@Column(name="city") // 매핑할 컬럼 정의 가능
private String city;
private String zipcode;
// ...
}
- 타입을 정의할 때는 @Embeddable 애노테이션 사용
정의한 임베디드 타입 사용
@Entity
public class Member {
@Id @GeneratedVAlue
private Long id;
private String name;
@Embedded
private Period Period; // 근무 기간
@Embedded
private Address Address; // 집 주소
}
- 정의한 타입을 사용할 때는 @Embedded 애노테이션 사용
참고로 임베디드 타입을 정의할 때 다른 임베디드 타입을 내부에서 사용할 수 있음.
@Temporal
@Temporal이라는 애노테이션을 사용하여, DB 타입에 맞도록 매핑할 수 있다.
TemporalType.Date : 년-월-일 의 date 타입
TemporalType.Time : 시:분:초 의 time 타입
TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입
애노테이션을 사용하지 않을 경우 기본값은 timestamp 입니다.
자바8 부터는 @Temporal 애노테이션을 대신 LocalDateTime을 사용하면 hibernate가 자동으로 치환해준다.
반응형