파라미터의 수가 많아지는 경우, 객체로 한 번에 넘기는 것이 편해보였다.
기존 코드
@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} 파라미터를 이렇게 가져왔다.
객체 내부 접근은 평소에 하던 것처럼 .으로 접근하면 된다.
참고
'Spring' 카테고리의 다른 글
Could not find org.projectlombok:lombok:.Required by: project : 에러 해결 (0) | 2023.07.31 |
---|---|
Spring에서 Feign 사용하기 (0) | 2023.07.31 |
JPA ConverterNotFoundException: No converter found capable of converting from type 에러 해결 (0) | 2023.07.26 |
JPA 양방향 매핑 Entity 한 번에 저장하기 (0) | 2023.07.23 |
Not a managed type: class java.lang.Object 에러 해결 (0) | 2023.07.23 |