반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* 단순 값을 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만 쓰면 된다.
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
10. 값 콜렉션 Map 매핑 (0) | 2023.03.21 |
---|---|
09. 값 콜렉션 List 매핑 (0) | 2023.03.20 |
07. @Embeddable2 - 다른 테이블에 매핑하기 (0) | 2023.02.28 |
06. @Embeddable (0) | 2023.02.27 |
05. 엔티티 식별자 생성 방식 (0) | 2023.02.23 |
댓글