querydsl JPAQueryFactory와 스프링 빈

최대 1 분 소요

QuerydslConfig.java

@Configuration
public class QuerydslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}
  • JPAQueryFactory를 빈으로 등록하여 싱글톤으로 관리할 시 동시성 문제가 발생할것 같지만 문제가 없다.
  • JPAQueryFactory는 EntityManager에 의존한다.
  • EntityManager는 스프링과 함께 쓸 경우 동시성 문제와 관계없이 트랜잭션 단위로 분리되어 동작한다.
  • 스프링에서 주입해주는 EntityManager는 사실 실제 영속성 컨텍스트가 아닌 프록시다.
  • 이 프록시 객체는 요청이 트랜잭션 단위로 실제 엔터티 매니저를 할당해준다.

댓글남기기