JPA의 값 타입 중에는 임베디드 타입이란 것이 존재한다.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
private LocalDateTime startDate;
private LocalDateTime endDate;
}
똑같은 날짜 타입으로 두 가지 컬럼이 존재한다.
'날짜'라는 공통점이 있기에 하나로 묶어 관리한다면 더 편하게 쓸 수 있을 듯 하다.
@Embeddable
public class Period {
private LocalDateTime startDate;
private LocalDateTime endDate;
}
.
.
.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
@Embedded
private Period workPeriod;
}
날짜를 한 번에 관리하는 클래스를 만들고 그 클래스를 속성으로 가져올 수 있다.
임베디드 타입을 선언하는 클래스에는 @Embeddable, 사용하는 쪽에는 @Embedded를 달아주면 된다.
물론 임베디드 타입 클래스 내부에서도 @Column으로 특정 컬럼과 매핑해줄 수 있다. 기본적으로는 임베디드 클래스의 모든 멤버변수들이 컬럼으로 만들어진다.
또한, 임베디드 클래스 내부에 메서드를 생성하여 좀 더 객체지향스러운 사용도 가능하다.
'김영한님 스프링 강의 정리 > JPA' 카테고리의 다른 글
JPQL - 쿼리 타입과 파라미터 바인딩 (0) | 2021.03.09 |
---|---|
값 타입과 immutable 객체 (0) | 2021.03.03 |
JPA의 데이터 타입 (엔티티 타입, 값 타입) (0) | 2021.03.02 |
Cascade를 통한 영속성 전이와 고아 객체 (0) | 2021.03.01 |
즉시 로딩과 지연 로딩 (0) | 2021.03.01 |