9장 값 타입
- JPA의 데이터 타입은 크게 엔티티 타입과 값 타입으로 분류됨.
- 엔티티 타입은 엔티티 객체이고, 값 타입은 단순히 값을 나타내는 타입이나 객체
- 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값 타입으로 나뉨
- 기본값 타입
- 자바 기본 타입 : int, double, …
- 래퍼 클래스 : Integer, Boolean, Character, …
- String
- 임베디드 타입
- 컬렉션 타입
- 모든 값 타입은 엔티티의 생명주기에 의존
9.1 기본값 타입
- 자바 기본 타입, 래퍼 클래스, String
- 엔티티와 달리 식별자 값이 없고, 독자적인 생명주기가 없음
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
private int age;
9.2 임베디드 타입(복합 값 타입)
- 직접 정의한 새로운 값 타입
- 엔티티가 가지고 있는 데이터를 응집력 있게 만듦
- [String city, String street, String zipcode] ⇒ [Address homeAddress]
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Temporal(TemporalType.DATE) java.util.Date startDate;
@Temporal(TemporalType.DATE) java.util.Date endDate;
private String city;
private String street;
private String zipcode;
@Embeddable
public class Period {
@Temporal(TemporalType.DATE) java.util.Date startDate;
@Temporal(TemporalType.DATE) java.util.Date endDate;
public boolean isWork(Date date){
...
}
}
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Temporal(TemporalType.DATE) java.util.Date startDate;
@Temporal(TemporalType.DATE) java.util.Date endDate;
private String city;
private String street;
private String zipcode;
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Embedded Period workPeriod;
@Embedded Address homeAddress;
- @Embeddable : 값 타입을 정의하는 곳에 표시
- @Embedded : 값 타입을 사용하는 곳에 표시