반응형
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 |