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

08. 값 콜렉션 Set 매핑

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

* 단순 값을 Set으로 보관하는 모델

  • role_perm은 role이 가지고 있는 권한을 보관하는 테이블이다.
  • 이런 테이블을 Collection테이블이라고 표현한다.
  • 이런 테이블을 자바 내에 표현하면 Role 객체 내의 Set으로 담게 표현할 수 있다.

 

* 단순 값 Set 매핑

  • Role 클래스에서 확인할 수 있다.
  • @EllementCollection@CollectionTable 애노테이션을 사용한다.
  • @CollectionTable의 name 은 role_perm을 지정하고 joinColumns는 role의 id를 참조하는 칼럼, 즉 join할 때 사용할 칼럼 지정한다.
  • 실제 값을 담을 column을 @Column(name = " ")에 준다. 해당 예시에서는 perm 이 될 수 있다.

 

* 저장

  • Role에 permission set을 인자로 넣어서 persist()를 실행해보자.
  • 먼저 role table 에 role을 insert한다.
  • 이후 set에 저장된 perm의 갯수만큼 role_perm table 에 role_id와 perm을 insert한다.

 

* 조회(lazy)

  • lazy는 Collection table을 나중에 읽어온다는 뜻이다.
  • role을 조회하는 시점에 role_perm을 함께 조회하는 것이 아니라, role을 먼저 조회하고 role_perm도 조회할 필요가 있으면 그 때 조회하는 방식이 lazy 방식이다.

 

* 조회(eager)

  • @ElementCollection(fetch = FetchType.EAGER)로 설정하면 eager하게 조회할 수 있다. fetch의 기본 값은 lazy이다.
  • role 데이터를 조회하는 시점에 role_perm데이터도 한 번에 읽어온다. 

 

* Set 수정 : add(), remove()

  • 각각 insert와 delete쿼리를 실행한다.

 

* Set  새로 할당

  • role 객체 내에서 setPermissions(Set<Perm>set); 메서드를 통해 set을 새로 할당할 수 있다.
  • 먼저 role_perm 테이블에서 role_id를 통해 해당 role_perm의 정보를 전부 delete한다.
  • 이후 새로 할당 받은 set을 insert한다.

 

* Set clear()

  • 데이터를 처음으로 사용하면 먼저 role_id와 select를 통해 데이터를 가져온다.
  • 이후 delete를 통해 해당 role_perm 데이터를 전부 삭제한다.

 

* Embeddable 타입 set

  • Set에는 단순 타입 뿐만 아니라 Embeddable 타입도 사용 가능하다.

 

* 매핑 설정

  • @Column 애노테이션을 사용하지 않는다.
  • Set의 값으로 Embeddable 타입을 사용하기만 하면 된다.
  • Embeddable 타입에는 eaulas()메서드와 hashCode() 메서드가 필요하다.

 

* 정리

  • Collection 테이블을 이용한 값 Set 매핑
    • @ElementCollection과 @CollectionTable만 쓰면 된다.
반응형

댓글