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으로 특정 컬럼과 매핑해줄 수 있다. 기본적으로는 임베디드 클래스의 모든 멤버변수들이 컬럼으로 만들어진다.

 

또한, 임베디드 클래스 내부에 메서드를 생성하여 좀 더 객체지향스러운 사용도 가능하다.

 

 

 

 

 

 

 

+ Recent posts