JPA | JPA With Native Query
JPA(Java Persistence API)를 사용할 때, JPA에서 제공하는 쿼리 메서드 외 SQL 쿼리를 직접 입력하여 사용해야 하는 경우가 있다.
나의 경우에는 테이블에 어떤 조건의 갯수를 구할때 Entity에서 @Folmura를 사용하여 서브쿼리를 사용해서 구했었는데,
Entity에서 직접 DB에 서브쿼리를 날리는 건 용도 분리의 목적에서 권고하지않는다고하여 JPA의 native query를 이용하여 수정 구현하였다.
NatvieQuery는 JPQL이 아닌 SQL를 직접 정의하여 사용하는 방식이다.
function과 join를 하는 경우 JPQL를 사용할 수도 있지만 SQL를 직접 정의할수있는 NativeQuery를 사용할 수 있다.
📍@Formula를 사용한 Inner query 이용 방식
: Formula 어노테이션을 통한 서브쿼리를 날리는 방식
: 위 방식의 경우 DB에 별도로 컬럼을 만들지않고, select 해서 리턴하는 형식
: 용도/목적분리를 위해서 Repository에서 JPQL을 통한 방식으로 변경
📌 @Query를 사용한 Native Query 이용 방식
: @Query Annotation는 Entity의 JpaRepository를 상속받는 인터페이스에 정의하게 된다.
: @Query를 이용하여 NativeQuery를 작성하는 방법은 @Query 속성중 nativeQuery의 값을 true로 설정하며 value에는 SQL문을 작성하면 됨
: 기본적인 작성방법은 from 구문에 Entity의 객체를 선언하여 해당 객체의 속성명을 통해서 조건과 파라미터를 작성한다.
: 각 문장이 문자열로 이어져있어서 각 문장 끝에 띄어쓰기 추가가 필요하다.
🌀 value = " "안에 조회하고싶은 쿼리를 작성하고, nativeQuery=true로 옵션을 설정한다.
🌀 나의 경우 Where절에 들어가는 id가 가변적이였기 때문에 ':id'로 값을 주어서 id값을 입력받아 일치하는 쿼리의 갯수를 계산하도록 쿼리를 짰다.
: 사용시에는 우리가 findAll을 사용하는 것 처럼 Repository.매개값 으로 호출하여 사용 가능하다 ! 🔥