-
Notifications
You must be signed in to change notification settings - Fork 3
Querydsl과 JPA data를 혼용 시, 한 테이블에 repository를 2개를 만들어야 하는 문제
F i n n edited this page Dec 12, 2022
·
3 revisions
-1. JPA data의 경우 인터페이스 PostRepository를 만들어, JpaRepository를 상속 받는 구조로 만듬.
-2. 그러나, Querydsl이나 JPQL사용 시, interface가 아닌 실제 구현 부가 존재 하여야 함.
즉, Query문을 구현하는 Class가 존재 하여야 하므로, PostRepository가 아닌 PostRepository2라던가 PostQueryRepository등으로 새로운 Class를 만들어야 함.
-3. 한 entity에 여러개의 repository가 매핑이 되어 있으면, query를 작성하는 사람의 경우에는 혼동이 오지 않지만, Service 단에서 구현해 놓은 코드를 가져다 쓰는 사람의 입장에선 혼동이 올 수 있음. 또한 자바의 객체지향의 관점에서도 설계적으로 부적절하다는 판단을 함.
이 문제를 해결하기 위해, PostRepository를 JpaRepository이외에 PostRepositoryCustom이라는 인터페이스를 이중 상속 받게 한 뒤, 이를 PostRepositoryImpl이라는 구현 클래스를 만들어 해결 함.
Java언어는 클래스의 경우 상속을 1개만 받을 수 있는 제한이 있지만, 인터페이스의 경우에는 여러 개의 상속이 가능하다는 점을 이용하여 해결하였음.
PostService 단에서 Post Entity 즉, Post table과 관련된 모든 Repository는 PostRepository로 통일 되어, 코드의 계층구조가 깔끔해졌다.