개발/Datebase

JPA를 nativeQuery로 변경! (UNION 사용!)

aihtnyc_h 2024. 1. 1. 14:14
728x90
반응형
SMALL

발생한 원인... 기존 홈페이지에서 서로 다른 테이블을 같은 쿼리 결과를 보여주고 싶을때!

UNION을 사용해야할때!

(SELECT
행1, 행2, 행3, 행4, 행5
FROM a.테이블
WHERE 조건)

UNION

(SELECT
행1, 행2, 행3, 행4, 행5
FROM b.테이블
WHERE 조건)

위처럼 사용할 수 있는데, 슬프게도… JPA에서는 사용할 수 없다..!

그래서 nativeQuery로 변경이 필요하다!

public interface RepositoryCustom {
    @Query(value = "(SELECT\\n" +
            "    행1, 행2, 행3, 행4, 행5\\n" +
            "FROM\\n" +
            "    a.테이블\\n" +
            "    INNER JOIN 조인할 테이블\\n" +
            "WHERE\\n" +
            "    id = di)\\n" +
            "\\n" +
            "UNION\\n" +
            "\\n" +
            "(SELECT\\n" +
            "    행1, 행2, 행3, 행4, 행5\\n" +
            "FROM\\n" +
            "    a.테이블\\n" +
            "    INNER JOIN 조인할 테이블\\n" +
            "WHERE\\n" +
            "    id = di)\\n" +
            "\\n",nativeQuery = true,
            countQuery = "SELECT COUNT(*) FROM a.테이블 INNER JOIN 조인할 테이블 WHERE id = :id\\n"+
                         "UNION\\n" +
                         "SELECT COUNT(*) FROM a.테이블 INNER JOIN 조인할 테이블 WHERE id = :id\\n")

    Page<DTO.ListData> findByList(Pageable pageable, DTO.ListRequest requestParam, @Param("id") int id);

}

이런식으로 Repository에 만들면 된다~~ 그리고 내가 실수한 부분은 countQuery부분이다..

 

SELECT COUNT(*) 에서 * 을 찾을 수 없고
countQuery 부분도 UNION으로 만들어야한다!

다음에는 틀리지 말자!!

728x90
반응형
LIST