Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- node.js
- 오라클
- jpa
- 백엔드
- 자바스크립트
- 코드테스트
- MySQL
- 미니정리
- 데이터베이스
- 스프링부트
- 자바
- spring
- 알고리즘
- 디자인 패턴
- 프로그래머스
- 스프링
- oracle
- 프런트엔드
- 코드 테스트
- jsp
- 쿼리
- 정리
- java
- BACK-END
- web
- 프론트엔드
- SQL
- Next.js
- JavaScript
- 서버
Archives
- Today
- Total
참치코더의 꿈 메모장
JPA / 값 타입 컬렉션(Value Type Collection) 정리 본문
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
'JPA' 카테고리의 다른 글
| JPA / 경로 탐색, 패치 조인 미니 정리 (0) | 2025.11.05 |
|---|---|
| JPA / JPA 프로젝션, 페이징 API, JOIN 정리 (0) | 2025.10.29 |
| JPA / 기본값 타입, 임베디드 타입 정리, 불변객체란?, 그에 따른 비교 (0) | 2025.10.24 |
| JPA / 지연로딩(lazy loading), 즉시로딩(eager loading), 영속성 전이(cascading), 고아객체(Orphan) 정리 (0) | 2025.10.21 |
| JPA / @MappedSuperclass, 프록시 개념 정리 (0) | 2025.10.15 |
Comments