inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 주문

상품 주문 시 주문 내역에 값이 들어가 있지 않습니다

해결된 질문

674

workkkkk

작성한 질문수 2

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
상품주문에서 submit을 누르면 다음과 같은 화면이 나옵니다.

사진과 같이 코드 48번째 줄을 추가하면 콘솔에 0이 찍힙니다.

 

H2콘솔에는 데이터가 잘 들어가 있는 것 같습니다.

 

도움 주시면 잘 읽고 해결해보도록 하겠습니다 감사합니다!!!

웹앱 java 웹앱 spring jpa JPA spring-boot

답변 2

1

OMG

안녕하세요. workkkkk님, 공식 서포터즈 OMG입니다.

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

구글 드라이브 업로드 방법 링크

주의: 업로드시 권한 문제 꼭 확인해주세요


감사합니다.

0

workkkkk

안녕하세요! 링크남깁니다 감사합니다!!

https://drive.google.com/file/d/1_QGpE1heX3XNQrQTnL7RnudHztEKp1tr/view?usp=sharing

0

OMG

액세스 권한요청이 뜨네요

링크있는사용자 권한허용으로 변경해주세요

퇴근후 확인해보겠습니다

0

workkkkk

변경하였습니다. 감사합니다!

https://drive.google.com/file/d/1_QGpE1heX3XNQrQTnL7RnudHztEKp1tr/view?usp=sharing

0

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 상태입니다.

image주문 목록 화면에 진입하는 시점을 생각해보면 회원명과 주문상태를 검색하지 않고 바로 화면에 들어가죠? 그렇기 때문에 null입니다.

그래서 null이 왜 문제가 되냐면

 where o.status = :status " +
        " and m.name like :name ", Order.class)

where 조건에서 주문상태가 Null이면서 회원이름이 Null(like) 을 체크 하기 때문에 where 조건에 만족하지 않아 데이터 조회를 실패하게 됩니다.

 

0

OMG

제가 올린 강의코드로 findAll()을 교체하면 정상적으로 실행 확인하실 수 있을거에요.

0

workkkkk

정상적으로 실행됩니다. 정말 감사합니다!

0

Sang-Uk Lee

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.

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

21

1

sdk 설정 오류

0

59

2

오탈자 - @Transactional

0

58

1

src/test/resources 테스트 경로 문제

0

53

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

67

1

MemberRepositoryTest 실행오류

0

83

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

186

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

146

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

54

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

77

1

기본 생성자

0

62

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

104

1

멤버서비스테스트 부분에서 막힙니다.

0

168

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

118

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

122

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

115

1

24분 27초 연관관계 편의 메서드 위치

0

114

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

112

2

빌드 툴, Gradle

0

61

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

78

2

Repository에서 EntityManager 주입 방식 차이

0

91

1

롬복과 사용자 정의 setter 메서드

0

74

1

주문 목록 조회 fetch join 질문드립니다

0

85

1

dirty checking 질문드립니다.

0

84

1