본문 바로가기
Java & Kotlin/Spring Data

[QueryDSL] Spring Data JPA와 QueryDSL 사용하기

by heekng 2022. 5. 15.
반응형

Spring Data JPA와 QueryDSL 사용하기

지금까지 본 QueryDSLEntityManager을 직접 받아 개별적으로 JPA 환경에서 사용하는 것이였다.
이제 Spring Data JPA와 함께 사용하여 더 효율적으로 QueryDSL을 사용해보자.

사용자 정의 리포지토리

  • 사용자 정의 리포지토리의 구성
    1. 기존 Spring Data RepositoryMemberRepository interfaceJpaRepository interface를 상속받는다.
    2. QueryDSL 사용을 위한 MemberRepositoryCustom interface를 생성하고, QueryDSL을 사용할 메서드를 생성한다.
    3. MemberRepository interfaceMemberRepositoryCustom interface를 상속받는다.
    4. MemberRepositoryImpl class 또는 MemberRepositoryCustomImplMemberRepositoryCustom interface의 구현체이며, MemberRepositoryCustom interface에서 정의한 메서드를 구현한다.
  • 위 방식의 흐름은 기존 SpringDataJPArepository에 QueryDSL 사용을 위한 Interface를 상속, QueryDSL 사용을 위한 Interface의 구현체를 만들어 MemberRepository에서 QueryDSL사용 메서드까지 이용할 수 있는 것이다.

JPAQueryFactory 사용 방법

JPAQueryFactoryEntityManager를 사용하여 동작한다.
JPAQueryFactory를 Bean으로 등록해 주입받아 사용하도록 해보자.

// Configuration
@Bean
JPAQueryFactory jpaQueryFactory(EntityManager em) {
    return new JPAQueryFactory(em);
}

---

private final JPAQueryFactory queryFactory;

public MemberRepositoryImpl(EntityManager em) {
    this.queryFactory = new JPAQueryFactory(em);
}
  • Bean 등록 후 주입받아 사용하는 경우 동시성 문제에 대한 고민이 생길 수 있다.
  • JPAQueryFactoryEntityManager을 의존받고, EntityManager은 트랜젝션 단위로 작동하기 떄문에 주입받은 JPAQueryFactory 또한 EntityManager과 같이 트랜젝션 단위로 동작한다.
  • 그래서 동시성 문제는 고민하지 않아도 된다.
반응형