본문 바로가기
Programming/JPA & Spring Data JPA 기초

09. 값 콜렉션 List 매핑

by JKROH 2023. 3. 20.
반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.

 

* 단순 값을 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

댓글