JPA_Chap14_컬렉션과 부가 기능

윤일권·2023년 7월 11일
0

JPA

목록 보기
10/11

컬렉션

Collection, List

  • 중복을 허용하는 컬렉션이고, PersistenBag을 래퍼 컬랙션으로 사용
  • Collection, List는 엔티티를 추가할 때 중복된 엔티티가 있는지 비교하지 않고, 단순히 저장만 하면된다. 따라서 엔티티를 추가해도 지연 로딩된 컬렉션을 초기화하지 않는다.

Set

  • 중복을 허용하지 않는 컬렉션
  • Set은 엔티티를 추가할 때 중복된 엔티티가 있는지 비교해야 한다. 따라서 엔티티를 추가할 때 지연 로딩된 컬렉션을 초기화한다.

List + @OrderColumn

  • @OrderColumn을 추가하면 순서가 있는 특수한 컬렉션으로 인식.
  • 순서가 있다는 의미는 데이터베이스에 순서 값을 저장해서 조회할 때 사용한다는 의미. (PersistentList 사용)

@Converter

  • 컨버터를 사용하면 엔티티의 데이터를 변환해서 데이터베이스에 저장할 수 있다.
  • 컨버터 클래스는 @Converter를 사용하고 AttributeConverter 인터페이스 구현해야 한다.
  • @Converter(autoApply = true) 옵션을 적용하면 모든 카입에 컨버터를 적용한다.

리스너

  • JPA 리스너 기능을 사용하면 엔티티의 생명주기에 따른 인벤트를 처리할 수 있다.
  • 이벤트 적용 위치
    • 엔티티에 직접 적용
    • 별도의 리스너 등록
    • 기본 리스너 사용
  • 여러 리스너 등록시 이벤트 호출 순서
    • 기본리스너 -> 부모 클래스 리스너 -> 리스너 -> 엔티티

엔티티 그래프

  • 엔티티 그래프 기능은 엔티티 조회 시점에 연관된 엔티티들을 함께 조회하는 기능이다.
  • 정적으로 정의하는 Named 엔티티 그래프
    • @NamedEntityGraph로 정의
  • 동적으로 정의하는 엔티티 그래프
    • createEntityGraph() 메소드를 사용.
  • JPQL에서 엔티티 그래프를 사용하는 방법은 em.find()와 동일하게 힌트만 추가하면 된다.
profile
생각하는 개발자가 되겠습니다!!

0개의 댓글