JPA 임베디드 타입

장원재·2024년 5월 1일
0

jpa

목록 보기
8/11

@MappedSuperclass는 공통된 필드를 모아주는 역할을 한다. 이와 유사하게 임베디드 타입은 공통된 필드를 제공하면서 재사용성을 가능하게 해준다. 그러면 이 둘과의 차이점이 뭘까? 가장 큰 차이점은 바로 상속과 위임의 차이다. @MappedSuperclass는 추상화 메서드로 주로 사용하며, 필요한 필드들을 상속해준다. 반면에 임베디드 타입을 사용하는 값타입 클래스는 필드와 관련된 메서드들을 만들고, 값타입 클래스를 활용하는 객체로부터 기능을 위임받는다.

1. 사용법

  • @Embeddable @Embedded 2가지 어노테이션을 사용하면된다.
  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시

참고로 기본 생성자는 필수이다

2. 테이블과 객체

  • 디비 테이블은 변경점이 없다. 그저 엔티티에서 값타입(Period, Address) 를 가져다 쓰는 것이다.

3. 코드

@Entity
public class Member{

    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String name;

    @Embedded
    private Address address;

    @Embedded
    private Period period;
}
  • Address, Period 의 값타입을 가져다가 쓰는 Member 엔티티이다.
  • 정의된 값타입을 사용하기 위해서 @Embedded 를 사용했다.
@Embeddable
public class Period {
    private LocalDateTime startDate;
    private LocalDateTime endDate;

    public Period() {
    }
}

@Embeddable //값 타입을 정의하는 곳
public class Address {

    private String city;
    private String street;
    private String zipcode;

    public Address() {
    }
}
  • 값 타입을 정의하기 위해서 @Embeddable 어노테이션을 사용했다.
  • 기본 생성자를 넣어야 한다는 점을 기억하자.
profile
데이터 분석에 관심있는 백앤드 개발자 지망생입니다

0개의 댓글

관련 채용 정보