본문 바로가기

Spring

JPA JPQL 파라미터 객체(Object)로 한 번에 넘기기

파라미터의 수가 많아지는 경우, 객체로 한 번에 넘기는 것이 편해보였다.

 

기존 코드

@Query(value = "SELECT s " +
        "FROM Student s " +
        "LEFT JOIN s.team t " +
        "WHERE current_timestamp BETWEEN t.startDate AND t.endDate " +
        "AND t.category_id IN :category_id " +
        "AND t.is_public = :isPublic")
List<Student> find(@Param("categoryList") List<Long> categoryList,
                   @Param("isPublic") Flag isPublic);

위의 코드는 파라미터의 수가 적지만..

실제 코드에서는 쿼리도 복잡해지고 파라미터도 점점 많아지고 있던 상황이었다.

이걸 한 번에 넘겨주고 싶었다.

 

개선

@Query(value = "SELECT s " +
        "FROM Student s " +
        "LEFT JOIN s.team t " +
        "WHERE current_timestamp BETWEEN t.startDate AND t.endDate " +
        "AND t.category_id IN :#{#teamInfo.category_id} " +
        "AND t.is_public = :#{#teamInfo.isPublic}")
List<Student> find(@Param("teamInfo") TeamInfo teamInfo);

기존 value 내부에서는 :id 이런 방식으로 사용해서 파라미터를 가져왔는데,

객체로 받아오는 경우에는 :#{#info.id} 파라미터를 이렇게 가져왔다.

객체 내부 접근은 평소에 하던 것처럼 .으로 접근하면 된다.

 

참고

https://udud0510.tistory.com/64