해결된 질문
작성
·
806
0
강의를 다시 복습하면서 코드를 다시 유심히 보다가 발견하지 못한 부분을 발견해서 질문드립니다
주문 목록을 타임리프를 이용해서 뿌리는 코드는 다음과 같은데요
여기서 의문점이 Order와 Member는 다대일 관계이기 때문에 Order 리스트에 대해서 Order id와 Member 정보는 저렇게 출력하는게 가능한데 Order와 OrderItem은 1대다 관계인데 orderItems[0] 형태로 0 인덱스만 주었는데 출력이 되어있는데요 orderItems는 리스트인데 인덱스는 0만 주어서 출력하는 부분에서 타임리프 가이드를 보긴 했는데 이런 케이스에 대해서는 왜 이런식으로 코드가 나오는지 이해 안돼서 질문드립니다.
왜냐하면 저렇게 하면 하나의 Order에 대해서 Orderitem이 하나 밖에 나오지 않아서요
검증쿼리는 다음과 같이 던져서 검증 했구요
SELECT M.NAME, O.ORDER_ID, I.ORDER_PRICE, I.COUNT, IT.NAME
FROM ORDERS O
, ORDER_ITEM I
, MEMBER M
, ITEM IT
WHERE 1=1
AND O.ORDER_ID = I.ORDER_ID
AND M.MEMBER_ID = O.MEMBER_ID
AND IT.ITEM_ID = I.ITEM_ID
ORDER BY M.NAME ASC, O.ORDER_ID ASC, IT.NAME ASC, I.COUNT ASC
출력결과는 다음과 같습니다.
저런 상황이 발생하지 않도록 알맞게 처리하기 위해서는
view에 뿌려줄 수 있도록 적절한 DTO로 변환해서 뿌려줘야하는 것이 맞는지 궁금합니다.
답변 1
1
안녕하세요. 갓다귀갓장국님, 공식 서포터즈 OMG입니다.
아래 질문글에서도 영한님이 답변해주시지만, 예제의 단순함을 위해0번째 인덱스로 [0] 고정하신 것입니다.
실제 구현한다면, item의 반복문을 수행하면서, orderItem의 반복문을 수행해야겠지요.
타임리프에서도 <th:block>을 이용하여 이중 for문이 가능합니다.
참고)
인덱스 0 고정이유
https://www.inflearn.com/questions/36625
타임리프 이중foreach문(nested loop)
https://stackoverflow.com/questions/19956493/nested-double-loop-with-thymeleaf
감사합니다.
답변 감사합니다. 도움되었습니다