반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* 단순 값을 Map으로 보관하는 모델
- doc_prop 테이블은 map에 해당하는 테이블이다.
- name이 key, value가 value로 저장된다.
- Document의 props에 매핑된다.
* 단순 값 Map 매핑
- Document 클래스에서 확인할 수 있다.
- 기본적인 방법은 Set, List와 동일한다.
- @MapKeyColumn 애너테이션을 사용한다는 차이가 있다. 해당 애너테이션은 key값으로 쓰일 칼럼을 지정한다.
* 저장
- 여러 값을 보유한 Map을 이용해 props 맵을 만들고 해당 props를 인자로 넘겨준 Document 객체를 생성하고 persist()를 해보자.
- 기본적으로 doc 테이블에는 map을 제외한 content, title, id값을 저장한다.
- doc_prop 테이블에는 해당 맵이 어느 객체의 것인지를 나타내기 위한 doc_id와 name, value가 저장된다.
- 예를 들어, props에 <"p1" : "v1">, <"p2" : "v2"> 를 넣고 Document 객체를 만들어서 저장한다고 하자.
- doc_prop테이블에는 두 개의 row가 저장된다.
- 두 row의 doc_id는 모두 DOC1이다.
- name과 value가 각각 저장된다.
* Map에 값 추가/수정/삭제
- Map의 값을 추가하면 insert 쿼리를 실행해 doc_prop 테이블에 새롭게 저장한다.
- 수정하면 update쿼리를 실행한다.
- 삭제하면 delete 쿼리를 실행한다.
- 이때 Map을 담은 객체 인스턴스를 통해 doc_id를 구한다.
- update의 경우, Map의 key인 name은 변하지 않기 때문에 value만 테이블에서 update set해준다.
- delete의 경우, doc_id와 함께 Map의 key인 name을 사용한다.
- 새로운 Map을 할당하면, delete쿼리로 기존 테이블을 전부 지우고 새롭게 테이블을 할당한다.
* Embeddable 타입 Map
- 앞의 경우들과 마찬가지로 @Column 애너테이션을 사용하지 않는다.
- 클래스에서 Map의 key던 value던 Embeddable 타입을 넣어준다.
* 정리
- 컬렉션 테이블을 이용한 값 Map 매핑
- @ElementCollection과 @CollectionTable, @MapKeyColumn이면 된다.
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
12. 영속 컨텍스트 & 라이프사이클 (0) | 2023.03.23 |
---|---|
11. 값 콜렉션 주의사항 (0) | 2023.03.22 |
09. 값 콜렉션 List 매핑 (0) | 2023.03.20 |
08. 값 콜렉션 Set 매핑 (0) | 2023.03.02 |
07. @Embeddable2 - 다른 테이블에 매핑하기 (0) | 2023.02.28 |
댓글