참치코더의 꿈 메모장

JPA / 값 타입 컬렉션(Value Type Collection) 정리 본문

JPA

JPA / 값 타입 컬렉션(Value Type Collection) 정리

참치깡 2025. 10. 27. 22:25
728x90

 

- 값 타입 등을 List, Set, Map과 같은 컬렉션으로 보관할 때 사용하는 매핑 방식이다.

- 엔티티가 아닌 값이므로 독립적인 테이블이 없고, JPA가 별도의 테이블을 만들어 관리하는 방식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Entity
public class Member {
 
    @Id @GeneratedValue
    private Long id;
 
    private String name;
 
    @ElementCollection
    @CollectionTable(
        name = "member_address",
        joinColumns = @JoinColumn(name = "member_id")
    )
    private Set<Address> addressHistory = new HashMap<>();
}
 
// @ElementCollection -> 값 타입 컬렉션 만들때 사용하는 쿼리, 기본은 LAZY이다.
// @CollectionTable -> 값을 저장할 별도 테이블 매핑 정보
 
 
cs

 

값 타입 컬렉션 특징

 

- 엔티티 생명주기에 종속된다 주인 엔티티가 삭제되면 컬렉션도 자동 삭제된다.

 

- 값 타입이기 때문에 식별자가 없다.

 

- 값 타입은 데이터를 변경했을때 추적이 불가능하다

 

- 지연 로딩(LAZY)이 기본이다.

1
2
3
member.getAddressHistory().remove(oldAddress);
member.getAddressHistory().add(newAddress);
 
cs

 

- 이렇게 하면 Hibernate가 기존 row를 전부 삭제하고 남은 값들을 다시 insert해서 

  통으로 데이터를 갈아끼게 된다. 즉 부분 업데이트가 되지 않으므로

  데이터가 많을수록 성능면에서도, 데이터 활용면에서도 좋지가 않다.

 

- 따라서 실무에서 값 타입 컬렉션은 조회 중심, 변경이 적은 경우에만 사용해야하고

  수정이 많으 비즈니스 로직이라면 1대다 엔티티를 만들어 사용해야 한다.

 

 

728x90
Comments