JPQL DTO 프로젝션 하는 법
DTO 프로젝션: 엔티티에서 원하는 필드만 선택하여 쿼리 결과로 반환하는 방법
- DTO 클래스 작성: 원하는 필드를 가지고 있는 DTO 클래스를 작성한다. 해당 필드를 담는 생성자 및 Getter 메서드는 필수.
- JPQL 쿼리 작성: SELECT 절에서는 엔티티 대신 DTO 클래스의 생성자를 사용하여 원하는 필드에 값이 들어가도록 작성한다. FROM절에는 엔티티를 지정하기.
@Query("SELECT new com.ohouse.ohouse.domain.UserCartDTO(" +
"cart.cartId, cart.user.userId, cart.menu.menuId, cart.quantity, " +
"co.cart.cartId, co.cartOptionId, co.option.optionId) " +
"from Cart cart " +
"left join CartOption co on cart.cartId = co.cart.cartId " +
"where cart.user.userId = :userId")
List<UserCartDTO> findCartByUser(int userId);
SELECT절에는 프로젝션 할 DTO 클래스의 위치를 넣고 new 해주기 👉 DTO 생성자를 이용해서 초기화하기