[JPA] 값 타입 컬렉션

@Test
    public void valueTypeCollection() {
        Member member = new Member();
        
        // 임베디드 값 타입
        member.setHomeAddress(new Address("통영", "몽돌해수욕장", "660-123"));
        
        // 기본갑 타입 컬렉션
        member
            .getFavoriteFoods()
            .add("짬뽕");
        member
            .getFavoriteFoods()
            .add("짜장");
        member
            .getFavoriteFoods()
            .add("탕수육");
        
        // 임베디드 값 타입 컬렉션
        member
            .getAddressHistory()
            .add(new Address("서울", "강남", "123-123"));
        
        member
            .getAddressHistory()
            .add(new Address("서울", "강북", "000-000"));
        
        em.persist(member);
				em.flush();
    }
@Entity
@Setter
@Getter
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    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 Set<Address> addressHistory = new HashSet<>();
}

@Embeddable
@AllArgsConstructor
@NoArgsConstructor
class Address {
    @Column
    private String city;
    private String street;
    private String zipcode;
}
  • member 엔티티만 영속화함.
  • SQL
    • member INSERT SQL 수행
    insert 
        into
            member
            (city, street, zipcode) 
        values
            (?, ?, ?)
    • homeAddress 컬렉션이 아니고 임베디드 값 타입이기에 회원 테이블 저장 SQL 이 수행
    insert 
        into
            address
            (member_id, city, street, zipcode) 
        values
            (?, ?, ?, ?)
    • favoriteFoods 3가지가 INSERT 된다.
    • addressHistory 2가지가 INSERT 된다.


Uploaded by N2T

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

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