티스토리 뷰

반응형

 

 

 



 

 

 

 

org.hibernate.hql.internal.ast.QuerySyntaxException: SampleEntity is not mapped

 

 

 

 

앞서 다중 DB를 사용하기 위해 설정하고

JPA + QueryDSL + Mybatis 를 이용할 수 있게 구성했는데 

그 중 querydsl 을 사용할 때 Primary DB 는 크게 문제 없이 잘 작동 하였는데

sub DB 가 위와 같은 오류를 내뿜었다.

 

해당 오류는 db에 엔티티 테이블 맵핑을 찾을 수 없어서 나는 오류이다.

 

 

 


 

 

[SpringBoot] 다중 Datasource, JPA+QueryDsl+Mybatis 사용 설정.

지난번에 이기종 DB 를 연결하기 위해 Datasource 를 분리하는 작업을 했었는데 거기에 덧붙여 JPA와 Mybatis를 사용할 수 있게하고 QueryDSL 까지 사용하려고 한다. [SpringBoot JPA] 다중 DB 설정하기 (multi Dat

jong-bae.tistory.com


 

 

 

 

 

 

 

나는 querydsl 설정을 아래와 같이 하였고

 

@Configuration
public class QuerydslConfig {

    @PersistenceContext(unitName = "primaryPersistence")
    private EntityManager entityManager;

    @PersistenceContext(unitName = "secondPersistence")
    private EntityManager secondEntityManager;

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

    @Bean
    public JPAQueryFactory secondJpaQueryFactory() {
        return new JPAQueryFactory(secondEntityManager);
    }
}

 

 

 

서브 querydsl 설정을 아래와 같이 해놨었다.

 

@Repository
@RequiredArgsConstructor
public class SampleQueryRepository {
	
    @Qualifier("secondJpaQueryFactory")
    private final JPAQueryFactory secondJpaQueryFactory;
    
    ...
}

 

JPAQueryFactory 클래스에 서브 db 빈을 주입해주고

final 변수 생성자를 만들어주는 @RequiredArgsConstructor 를 사용해서 

잘 동작할 것 이라 생각했지만...

 

 

@Autowired 를 사용하지 않아서 @Qualifier 가 무시되고,

Primary DB bean 을 바라보게 된 것이었다.

 

동일한 여러 빈을 올바르게 주입시키지 못하는 실수를 범하면서 

서브 db Entity 가 맵핑되지 않았다.

 

 

 

 

 

 

그래서 @Autowired를 쓰는 경우와 안쓰는 경우로 아래와 같이 해결 할 수 있다.

 

 

 

 

 

 


1. @Autowired 사용 안하고 생성자에서 직접 지정해주는 경우

@Repository
public class SampleQueryRepository {
	
    private final JPAQueryFactory secondJpaQueryFactory;
    
    public SampleQueryRepository(@Qualifier("secondJpaQueryFactory") JPAQueryFactory secondJpaQueryFactory) {
        this.secondJpaQueryFactory = secondJpaQueryFactory;
    }
    
    ...
}

 

 

 

 

2. @Autowired 사용해서 자동 주입시켜 주는 경우

@Repository
@RequiredArgsConstructor
public class SampleQueryRepository {

    @Autowired
    @Qualifier("secondJpaQueryFactory")
    private final JPAQueryFactory secondJpaQueryFactory;
    
    ...
}

 

 

 

 

 

 

 



 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday