QueryDsl - Repository에 JPAQueryFactory 주입하기

김건우·2022년 12월 14일
0

QueryDsl

목록 보기
5/8
post-thumbnail

지금 까지 배운 QueryDsl을 Repository에서 사용하기 위해서는 Respository에 JPAQueryFactory 를 주입해주어야한다. 주입하는 방법은 2가지가 있다.

1.해당 repository에 직접 주입하기

생성자 주입으로 JPAQueryFactory를 주입해주자! 매개변수는 EntityManager 만 있어도 된다.

//순수 jpa 레퍼지토리
@Repository
public class MemberJpaRepository {

    private EntityManager em;

    private final JPAQueryFactory queryFactory; 

    public MemberJpaRepository(EntityManager em) {
        this.em = em;
        this.queryFactory = new JPAQueryFactory(em);
    }

2. JPAQueryFactory 스프링 빈 등록

  1. 프로젝트의 메인 어플리케이션에 스프링 빈으로 등록해주자
@SpringBootApplication
public class JpadataApplication {

    public static void main(String[] args) {
        SpringApplication.run(JpadataApplication.class, args);
    }

    @Bean
    JPAQueryFactory jpaQueryFactory(EntityManager em) {
        return new JPAQueryFactory(em);
    }
}
  1. @RequiredArgsConstructor를 사용하여 주입해주자!
//순수 jpa 레퍼지토리
@Repository
@RequiredArgsConstructor
public class MemberJpaRepository {

    private EntityManager em;

    private final JPAQueryFactory queryFactory; // 메인application에 bean 으로 등록

참고: 동시성 문제는 걱정하지 않아도 된다. 왜냐하면 여기서 스프링이 주입해주는 엔티티 매니저는 실제동작 시점에 진짜 엔티티 매니저를 찾아주는 프록시용 가짜 엔티티 매니저이다. 이 가짜 엔티티 매니저는 실제 사용 시점에 트랜잭션 단위로 실제 엔티티 매니저(영속성 컨텍스트)를 할당해준다.

profile
Live the moment for the moment.

0개의 댓글