[JPA] 값 타입 컬렉션 개요

@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;

    @Embedded
    private Address homeAddress;

    // 문자열 집합을 테이블로 매핑
    @ElementCollection
    @CollectionTable(name="FAVORITE_FOODS",
                     joinColumns=@JoinColumn(name = "MEMBER_ID"))
    @Column(name="FOOD_NAME")
    private Set<String> favoriteFoods = new HashSet<>();

    // 임베디드 타입의 컬렉션을 테이블로 매핑
    @ElementCollection
    @CollectionTable(name = "ADDRESS", joinColumns=@JoinColumn(name = "MEMBER_ID"))
    private List<Address> addressHistory = new ArrayList<>();

    // ...
}

@Embeddable
public class Address {
    private String city;
    private String street;
    private String zipcode;

    // ...
}

위와 같은 테이블 구조가 생성되게 된다.

  • favoriteFoos 와 addressHistory 를 값 타입 컬렉션으로 가지게 되는 것이다.

기본값 매핑 및 커스텀 매핑

  • @CollectionTable 어노테이션을 생략하는 경우
    • JPA 는 기본값을 사용하여 테이블 이름을 지정한다.
    • 엔티티 이름 + 컬렉션 속성 이름을 결합한 이름으로 지정한다.
      • Member_addressHistory 이런식

Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 값 타입과 불변 객체  (0) 2023.11.10
[JPA] 값 타입 컬렉션  (0) 2023.11.09
[JPA] 값 타입 컬렉션 제약사항과 대안적 접근 방법  (0) 2023.11.09
[JPA] 객체지향 쿼리  (0) 2023.11.09
[JPA] JPQL 소개  (0) 2023.11.09