📝 JPA

JPA | JPA With Native Query

kyuu_ng 2022. 12. 14. 11:13

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.매개값 으로 호출하여 사용 가능하다 ! 🔥