[Spring JPA] JPQL, QueryDsl 인라인뷰(조인 안에 서브쿼리) 문제

2022. 5. 23. 09:58Web/spring-boot

- 현재 JPQL, QueryDsl 에서는 인라인뷰 구현이 힘들다.

- 하지만 현재 개발하던 프로젝트 중 Join 문 안에 서브쿼리를 구현해야하는 일이 생겨서 이렇게 해결방법을 기록해봅니다.

 

- 제가 아는 방법에서는 인라인뷰를 해결하는 방법은 MyBatis를 사용해 네이티브쿼리를 쓰는 방법과 

   다음으로 제가 적용해본 @Subselect 어노테이션을 사용하는 방법을 적어볼까합니다.

 

- 저는 어떻게든 QueryDsl에서 서브 쿼리를 사용해서 문제를 해결 할수 없을까 하다가 

   마치 가상 테이블(view)처럼 사용할 수 있는 Entity에 맵핑할 쿼리를 직접 작성하였습니다.

@Immutable : update될 수 없는 select용 엔티티를 선언해준다.

@Subselect : select문을 적어 가상의 뷰 Entity를 만들어준다.

@Synchronize : 싱크로나이즈 할 테이블을 설정해준다.

 

- 이렇게 하면 @Subselect에 작성된 쿼리 결과로 엔티티에 맵핑되게 된다.

 

이다음 join에 아까 작성한 Entity를 넣어주면 QueryDsl 로 인라인뷰가 해결된것을 알수있다.

 

- 네이티브 쿼리로 MyBatis를 활용하는 방법도 있겠지만 QueryDsl로 구현하는방법도 있다는 것을 알게되었다.