@Repository
@RequiredArgsConstructor
public class CartQueryRepository {
private final EntityManager em;
public List<CartQueryDto> findCartQueryDtos(Long cartId) {
List<CartQueryDto> cartQueryDtoList = em.createQuery(
"select new com.toyproject.ecommerce.repository.query.CartQueryDto(ci.id, i.name, ci.count, i.price)" +
" from CartItem ci" +
" join ci.item i" +
" where ci.cart.id = :cartId", CartQueryDto.class)
.setParameter("cartId", cartId)
.getResultList();
return cartQueryDtoList;
}
}
실제 진행한 프로젝트 예제를 가지고 상태 필드, 묵시적 조인, 명시적 조인을 설명드립니다.
ci.id, i.name, ci.count, i.price
가 모두 상태필드입니다.
public List<CartQueryDto> findCartQueryDtos(Long cartId) {
List<CartQueryDto> cartQueryDtoList = em.createQuery(
"select new com.toyproject.ecommerce.repository.query.CartQueryDto(ci.id, ci.item.name, ci.count, ci.item.price)" +
" from CartItem ci" +
" where ci.cart.id = :cartId", CartQueryDto.class)
.setParameter("cartId", cartId)
.getResultList();