반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* 단순 값을 List로 보관하는 모델
- 질문(Question)의 보기를 question_choice 테이블에 담는다.
- 보기는 순서대로 저장되어야 하기 때문에 List로 표현하여 Question 클래스의 choices와 매핑한다.
* 단순 값 List 매핑
- Question 클래스에서 확인할 수 있다.
- Set을 매핑할 때와 다르게 @OrderColumn 애노테이션을 사용한다. 해당 애노테이션을 통해 인덱스 값을 저장할 칼럼을 지정한다. 예시에서는 idx 칼럼을 사용한다.
- 이외에는 Set을 매핑할 때와 동일한다.
* 저장
- Question에 id, text, 보기의 리스트를 인자로 넣어 객체를 생성하고 이를 persist()해보자.
- Set과 동일하게 먼저 Question 테이블에 question을 insert한다.
- 이후 보기의 List를 question_choice 테이블에 insert한다.
- 이 때, idx 칼럼에는 0부터 시작하는 값이 순서대로 저장된다. List의 index와 매핑되는 것이다.
* 조회 (lazy, eager)
- set과 동일하다.
* List 수정 : 새로 할당
- 특정 question에 새롭게 보기의 리스트를 담아보자.
- 기존의 question_choice 테이블의 내용을 전부 삭제하고, 새롭게 인자로 전달된 보기의 List를 테이블에 저장한다.
- 개별 index의 값을 바꾸거나 삭제 / 삽입 할 수 있으나 잘 사용하지 않는다.
* 엔티티 삭제
- 엔티티를 삭제하면 컬렉션 테이블의 값도 함께 삭제된다.
- 먼저 할당된 question_choice 테이블의 데이터를 지우고, 그 다음 question 테이블을 삭제한다.
* Embeddable 타입 List
- Set과 마찬가지로 Embeddable 타입을 List에 담을 수 있다.
* 매핑 설정
- List<String>의 타입을 Choice로 바꾼다.
- 마찬가지로 @Column 애너테이션을 사용하지 않는다. 하나의 칼럼에 매핑하는 것이 아닌 Embeddable 타입으로 지정한 필드가 각 테이블에 매핑된다.
* 정리
- 컬렉션 테이블을 이용한 값 List 매핑
- @ElementCollection 과 @CollectionTalbe, @OrderColumn 이면 끝
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
11. 값 콜렉션 주의사항 (0) | 2023.03.22 |
---|---|
10. 값 콜렉션 Map 매핑 (0) | 2023.03.21 |
08. 값 콜렉션 Set 매핑 (0) | 2023.03.02 |
07. @Embeddable2 - 다른 테이블에 매핑하기 (0) | 2023.02.28 |
06. @Embeddable (0) | 2023.02.27 |
댓글