그 이유를 알아보자 (비교하기)


1. 스프링 데이터 JPA와 JpaRepository

2. QueryDSL과 JPAQueryFactory

3. 정리

코드 예시

@Configuration
@RequiredArgsConstructor
public class QuerydslConfig {

    private final EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}

위와 같이 설정하면, EntityManager는 스프링이 자동으로 관리하므로, 생성자 주입을 통해 받아올 수 있고, JPAQueryFactory는 빈으로 직접 등록하여 스프링 컨텍스트에서 사용할 수 있게 됩니다.

이것이 스프링이 내부적으로 EntityManager를 자동으로 관리하는 이유와 QueryDSL을 사용할 때 JPAQueryFactory를 직접 설정해야 하는 이유입니다.