김영한님 스프링 강의 정리/JPA
임베디드 타입 (복합 값 타입)
코등
2021. 3. 2. 21:30
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으로 특정 컬럼과 매핑해줄 수 있다. 기본적으로는 임베디드 클래스의 모든 멤버변수들이 컬럼으로 만들어진다.
또한, 임베디드 클래스 내부에 메서드를 생성하여 좀 더 객체지향스러운 사용도 가능하다.