반응형
Spring Data JPA와 QueryDSL 사용하기
지금까지 본 QueryDSL
은 EntityManager
을 직접 받아 개별적으로 JPA
환경에서 사용하는 것이였다.
이제 Spring Data JPA
와 함께 사용하여 더 효율적으로 QueryDSL
을 사용해보자.
사용자 정의 리포지토리
- 사용자 정의 리포지토리의 구성
- 기존
Spring Data Repository
는MemberRepository interface
가JpaRepository interface
를 상속받는다. QueryDSL
사용을 위한MemberRepositoryCustom interface
를 생성하고,QueryDSL
을 사용할 메서드를 생성한다.MemberRepository interface
는MemberRepositoryCustom interface
를 상속받는다.MemberRepositoryImpl class
또는MemberRepositoryCustomImpl
은MemberRepositoryCustom interface
의 구현체이며,MemberRepositoryCustom interface
에서 정의한 메서드를 구현한다.
- 기존
- 위 방식의 흐름은 기존
SpringDataJPA
의repository에 QueryDSL
사용을 위한Interface
를 상속,QueryDSL
사용을 위한Interface
의 구현체를 만들어MemberRepository
에서QueryDSL
사용 메서드까지 이용할 수 있는 것이다.
JPAQueryFactory 사용 방법
JPAQueryFactory
는 EntityManager
를 사용하여 동작한다.
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 등록 후 주입받아 사용하는 경우 동시성 문제에 대한 고민이 생길 수 있다.
JPAQueryFactory
는EntityManager
을 의존받고,EntityManager
은 트랜젝션 단위로 작동하기 떄문에 주입받은JPAQueryFactory
또한EntityManager
과 같이 트랜젝션 단위로 동작한다.- 그래서 동시성 문제는 고민하지 않아도 된다.
반응형
'Java & Kotlin > Spring Data' 카테고리의 다른 글
[QueryDSL] oneToMany 관계에서 여러 개의 fetchJoin 사용하기 (0) | 2022.06.24 |
---|---|
[QueryDSL] gradle querydsl 설정하기 (0) | 2022.05.15 |
[QueryDSL] 페이징 연동하기 (0) | 2022.05.15 |
[QueryDSL] 벌크연산과 SQL Funtion (0) | 2022.05.15 |
[QueryDSL] 동적쿼리 (0) | 2022.05.14 |
[QueryDSL] 프로젝션 (0) | 2022.05.14 |