컬렉션
- JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다.
- 컬렉션은 일대다나 다대다 엔티티 관계를 매핑하거나, @ElementCollection을 사용해서 값 타입을 하나 이상 보관할 때 사용된다.
래퍼 컬렉션
- 하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다.
- 이는 컬렉션을 효율적으로 관리하기 위한 것으로, 원본 컬렉션을 감싸는 내장 컬렉션을 생성해서 이 내장 컬렉션을 사용하도록 참조를 변경한다.
컬렉션 | 래퍼 컬렉션 | 초기화 |
Collection, List | PersistenceBag | ArrayList |
Set | PersistenceSet | HashSet |
- 하이버네이트의 이러한 특징 때문에 컬렉션을 사용할 때는 즉시 초기화해서 사용하는 것이 좋다.
List<Member> members = new ArrayList<Member>();
Collection, List
- Collection과 List 인터페이스는 중복을 허용하는 컬렉션으로, PersistenceBag을 래퍼 컬렉션으로 사용한다.
- 중복을 허용하기 때문에 add() 메서드를 실행하면 중복된 엔티티가 있는지 비교하지 않는다.
- 따라서 엔티티를 추가해도 지연 로딩된 컬렉션을 초기화하지 않는다.
Set
- Set은 중복을 허용하지 않는 컬렉션으로, 하이버네이트는 PersistenceSet을 래퍼 컬렉션으로 사용한다
- 중복을 허용하지 않기 때문에 엔티티를 추가할 때 중복된 엔티티가 있는지 비교해야 한다.
- 따라서 엔티티를 추가할 때 지연 로딩된 컬렉션을 초기화한다.
'Spring > JPA' 카테고리의 다른 글
프록시와 연관관계 관리 (0) | 2022.03.25 |
---|---|
엔티티 매핑 (0) | 2022.03.25 |
스프링에서의 영속성 관리 (0) | 2022.03.05 |
영속성 컨텍스트와 연속성 관리 (0) | 2022.03.05 |
N+1 문제와 해결 방법 (0) | 2022.03.05 |