Java/JPA

@Embedded, @Temporal

민철킹 2021. 5. 17. 18:19

@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가 자동으로 치환해준다.



반응형