QueryDsl Custom 클래스에 사용된 클래스 알아보기

김종완·2022년 7월 20일
0

인트로

현재 QueryDsl 커스텀 구현 클래스에 사용된 클래스들에 대해서 조사하고 정리하였다.

QueryDsl class란?

querydsl = Querydsl(em, PathBuilder(path.type, path.metadata))

위와같이 초기화 하여서 사용하고 있다.
그러면 매개 변수로 주고있는 em, PathBuilder에 대해 알아야한다.

EntityManager란?

em은 EntityManager의 약자이다. EntityManager의 역할은 영속성 context와 소통하는 인터페이스이다.
영속성 context는 모든 영속성 엔티티 ID에 대해 고유한 엔티티 인스턴스가 있는 엔티티 인스턴스 세트이다. 엔티티 인스턴스들과 생명주기가 영속성 context에 의해 관리된다.

EntityManager API의 역할

  • 영속성 엔티티 인스턴스를 제거하거나 추가할 때 사용된다.
  • 기본키로 엔티티를 찾을 때 사용된다.
  • 엔티티에 대한 쿼리문을 작성할 때 사용된다.

추가적으로 아래의 설명이 코드 주석에 포함되어 있었다.

주어진 EntityManager 인스턴스에서 관리할 수 있는 엔터티 집합은 영속성 단위로 정의됩니다. 영속성 단위는 응용 프로그램에 의해 관련되거나 그룹화되고 단일 데이터베이스에 대한 매핑에서 함께 배치되어야 하는 모든 클래스 집합을 정의합니다.

하지만 위 주석은 이해하기 조금 어려운 것 같다.

PathBuilder란?

PathBuilder는 동적 경로 구성을 위한 EntityPathBase의 확장이다.

EntityPathBase

EntityPathBase는 EntityPath 구현을 위한 기본 클래스를 제공한다.

EntityPath

EntityPath는 엔티티 경로 표현식에 대한 공통 인터페이스이다.

이번에는

val jpaEntityInformationSupport = 
JpaEntityInformationSupport.getEntityInformation(domainClass, em)

위와같은 코드가 있어서 해당 클래스들을 조사해보았다.

JpaEntityInformationSupport

공통 메소드 구현을 공유하기 위한 JpaEntityInformation 구현을 위한 기본 클래스입니다.

JpaEntityInformation

엔터티 인스턴스의 정보를 쿼리하는 기능을 추가하기 위한 EntityMetadata의 확장입니다.

EntityMetadata

Metadata for entity types

조사를 해보니 JpaEntityInformationSupport는 해당 entity 클래스에대해 설명하는 정보를 받기위해 사용되는 것 같다 예를 들어서 해당 Qclass를 찾는 용도라고 생각되는데 혹시 이 글을 보시면 JpaEntityInformationSupport에 대해서 설명해주시면 감사하겠습니다!

다음으로 사용된 코드는

val resolver = SimpleEntityPathResolver.INSTANCE

SimpleEntityPathResolver

리플렉션을 통해 쿼리 클래스를 조회하고 동일한 유형의 정적 필드를 사용하는 EntityPathResolver의 간단한 구현.

여기서 리플렉션이란? 구체적인 클래스 타입을 알지 못해도 해당 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바API 라고한다.
해당 말을 들어보니 asp.net으로 개발할때가 생각이 나는 것 같다. 컴파일 시점에는 사용할 클래스에대해서 알지 못하지만 런타임 시점에서는 알 수 있게 되는데 이점을 해결해준 것이 리플렉션과 비슷한 것 같다.

EntityPathResolver

일반 도메인 클래스를 EntityPath로 변환하는 방법을 추상화하는 전략 인터페이스이다.

이렇게 직접 QueryDsl custom class 구현에 사용된 클래스들을 알아 보았습니다. 직접 뜻을 살펴보았지만 이해하기는 쉽지 않은 것 같습니다.

profile
개발에 재미를 느끼며 꾸준히 성장하는 개발자 김종완 입니다.

0개의 댓글