해결된 질문
작성
·
581
답변 2
1
안녕하세요. workkkkk님, 공식 서포터즈 OMG입니다.
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
구글 드라이브 업로드 방법 링크주의: 업로드시 권한 문제 꼭 확인해주세요
감사합니다.
강의코드
String jpql = "select o from Order o join o.member m";
boolean isFirstCondition = true;
//주문 상태 검색
if (orderSearch.getOrderStatus() != null) {
if (isFirstCondition) {
jpql += " where";
isFirstCondition = false;
} else {
jpql += " and";
}
jpql += " o.status = :status";
}
//회원 이름 검색
if (StringUtils.hasText(orderSearch.getMemberName())) {
if (isFirstCondition) {
jpql += " where";
isFirstCondition = false;
} else {
jpql += " and";
}
jpql += " m.name like :name";
}
TypedQuery<Order> query = em.createQuery(jpql, Order.class)
.setMaxResults(1000);
if (orderSearch.getOrderStatus() != null) {
query = query.setParameter("status", orderSearch.getOrderStatus());
}
if (StringUtils.hasText(orderSearch.getMemberName())) {
query = query.setParameter("name", orderSearch.getMemberName());
}
return query.getResultList();
직접 작성하신 코드
return em.createQuery("select o from Order o join o.member m" +
" where o.status = :status " +
" and m.name like :name ", Order.class)
.setParameter("status", orderSearch.getOrderStatus())
.setParameter("name", orderSearch.getMemberName())
.setMaxResults(1000) //최대 1000번
.getResultList();
강의에서 작성한 코드처럼 복잡하게 처리한 이유가 있는데
직접 작성하신 코드는 복잡한 상황에 대한 처리가 되어 있지 않습니다.
size를 출력했을 때 0이 나온 이유는 당연히 쿼리에서 데이터 조회를 실패해서 0이 찍힌 것이고
실패한 이유는 주문 목록 조회하는 화면에서는 검색 조건이 없는 Null 상태입니다.
주문 목록 화면에 진입하는 시점을 생각해보면 회원명과 주문상태를 검색하지 않고 바로 화면에 들어가죠? 그렇기 때문에 null입니다.
그래서 null이 왜 문제가 되냐면
where o.status = :status " +
" and m.name like :name ", Order.class)
where 조건에서 주문상태가 Null이면서 회원이름이 Null(like) 을 체크 하기 때문에 where 조건에 만족하지 않아 데이터 조회를 실패하게 됩니다.
0
Though I need more context to oroperly tackle this question, it is highly likely that orderSearch condition is set in a way query does not return the orders.
Please check what is set and what is supposed to set in the orderSearch parameter.
안녕하세요! 링크남깁니다 감사합니다!!
https://drive.google.com/file/d/1_QGpE1heX3XNQrQTnL7RnudHztEKp1tr/view?usp=sharing