묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService.findOrders() 결과인 orders의 order가 orderItems를 갖지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]주문하기에서 HTML 오류가 떠서 같은 오류의 글들을 찾아보다가 order.orderList.html의 <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.name}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> </tr>부분에서 item.orderItems[0] 값이 있는지 확인하라는 글을 보고 OrderService.findOrders()의 결과를 디버깅하면서 확인했습니다.같은 오류의 다른 글들 모두 확인했고, 해당 사항 없었으며, 디버깅 시 DB에는 orderItem의 값이 정상적으로 저장되는 것을 확인했습니다.혹시나해서 OrderService.findOrders()의 내부 구현을 OrderRepository.findAllByString()과 OrderRepository.findAllByCriteria() 모두 해보았지만, 결론적으로 이 두 메서드가 반환한 orders가 orderItems을 갖지 못하는 것을 확인했습니다.현재 야생형 커리큘럼 중이어서 위 두 메서드의 코드를 분석하기에 어려움을 겪어 질문 올립니다. 아래는 OrderRepository 소스코드입니다.package jpabook.jpashop.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; import java.util.ArrayList; import java.util.List; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import org.springframework.util.StringUtils; @Repository @RequiredArgsConstructor public class OrderRepository { private final EntityManager em; public void save(Order order) { em.persist(order); } public Order findOne(Long id) { return em.find(Order.class, id); } public List<Order> findAllByString(OrderSearch orderSearch) { //language=JPAQL 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); //최대 1000건 if (orderSearch.getOrderStatus() != null) { query = query.setParameter("status", orderSearch.getOrderStatus()); } if (StringUtils.hasText(orderSearch.getMemberName())) { query = query.setParameter("name", orderSearch.getMemberName()); } List<Order> orders = query.getResultList(); return orders; } public List<Order> findAllByCriteria(OrderSearch orderSearch) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Order> cq = cb.createQuery(Order.class); Root<Order> o = cq.from(Order.class); Join<Order, Member> m = o.join("member", JoinType.INNER); //회원과 조인 List<Predicate> criteria = new ArrayList<>(); //주문 상태 검색 if (orderSearch.getOrderStatus() != null) { Predicate status = cb.equal(o.get("status"), orderSearch.getOrderStatus()); criteria.add(status); } //회원 이름 검색 if (StringUtils.hasText(orderSearch.getMemberName())) { Predicate name = cb.like(m.<String>get("name"), "%" + orderSearch.getMemberName() + "%"); criteria.add(name); } cq.where(cb.and(criteria.toArray(new Predicate[criteria.size()]))); TypedQuery<Order> query = em.createQuery(cq).setMaxResults(1000); //최대 1000건 List<Order> orders = query.getResultList(); return orders; } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 submit 버튼 누룰 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported https://drive.google.com/file/d/1SPT29SzTIZ-E-f3aJrRZ8IvxPyXhJVtR/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
자동주입이 안되고 있습니다. ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)주입이 안되고 있는데 왜그런지 모르겠습니다 ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정시 유효성 검사
상품 수정 기능 구현중에수정내역의 유효성 검사를 추가해보고 싶어서 코드를 추가했습니다.```java``` package jpabook.jpashopre.controller; import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotEmpty; @Getter @Setter public class BookForm { private Long id; @NotEmpty(message = "이름은 필수 입력 사항입니다.") private String name; private int price; private int stockQuantity; @NotEmpty(message = "작가은 필수 입력 사항입니다.") private String author; private String isbn; } package jpabook.jpashopre.controller; import jpabook.jpashopre.domain.item.Book; import jpabook.jpashopre.domain.item.Item; import jpabook.jpashopre.service.ItemService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; @Controller @RequiredArgsConstructor @Slf4j public class itemController { private final ItemService itemService; @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "item/createItemForm"; } @PostMapping("/items/new") public String create(@Valid @ModelAttribute("form") BookForm form, BindingResult result) { if(result.hasErrors()){ return "item/createItemForm"; } Book item = new Book(); item.setName(form.getName()); item.setPrice(form.getPrice()); item.setStockQuantity(form.getStockQuantity()); item.setAuthor(form.getAuthor()); item.setIsbn(form.getIsbn()); itemService.saveItem(item); return "redirect:/"; } @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "item/itemList"; } @GetMapping("/items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findOne(itemId); BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); form.setAuthor(item.getAuthor()); form.setIsbn(item.getIsbn()); model.addAttribute("form", form); return "item/updateItemForm"; } @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") @Valid BookForm form,@PathVariable("itemId")Long itemId, BindingResult result) { if (result.hasErrors()) { return "item/updateItemForm"; } itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity(), form.getAuthor(), form.getIsbn()); return "redirect:/items"; } } <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header" /> <style> .fieldError { border-color: #bd2130; } </style> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form th:object="${form}" method="post"> <!-- id --> <input type="hidden" th:field="*{id}" /> <div class="form-group"> <label th:for="name">상품명</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요" th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p> </div> <div class="form-group"> <label th:for="price">가격</label> <input type="number" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요" /> </div> <div class="form-group"> <label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}" class="form-control" placeholder="수량을 입력하세요" /> </div> <div class="form-group"> <label th:for="author">저자</label> <input type="text" th:field="*{author}" class="form-control" placeholder="저자를 입력하세요" th:class="${#fields.hasErrors('author')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('author')}" th:errors="*{author}">Incorrect date</p> </div> <div class="form-group"> <label th:for="isbn">ISBN</label> <input type="text" th:field="*{isbn}" class="form-control" placeholder="ISBN을 입력하세요" /> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <div th:replace="fragments/footer :: footer" /> </div> <!-- /container --> </body> </html>이름을 입력하지 않고 유효성검사를 실시했습니다. 하지만...네...실패했습니다네트워크에서도 이름이 빠진채로 의도대로 전달도 되었으나 뷰를 표기하지 못하고 화이트라벨 에러페이지만 나옵니다 ㅠ콘솔도 의도된 에러메시지가 출력이 됩니다.뷰단쪽에 문제 일까요? 해결th:action="@{/items/*{id}/edit}" ->updateItemForm,html에 form에 action으로 해결하였습니다.화이트라벨 에러페이지가 좀더 상세한 에러메시지를보여줬으면 하는데 어떻게 설정해야 할까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
flush() 전에 Insert 쿼리 출력되는 현상
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의에서는 flush()를 호출하기 전에는 insert 문이 나가지 않는다고 하셨는데, 저 같은 경우에는 위와 같이 작성해도 insert 문이 콘솔에 출력됩니다. 이유가 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
index.html의 href 경로가 C:/로 연결됩니다.
index.html의 href 경로가 localhost:8080/hello로 연결되지 않고 C:/hello로 연결되어서원하는대로 작동하지 않습니다. 제가 뭘 놓친 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 에서 Submit 버튼 누를시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 상품 주문에 정보를 입력하고 submit 버튼을 누르면 Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported] 오류가 발생합니다.
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
Favorite.js 질문입니다.! 화면 새로고침하면, 추가한 Favorite chatrooms가 날라가고 딱 1개만 남습니다!
Favorite.js 질문입니다.! 화면 새로고침하면, 추가한 Favorite chatrooms가 날라가고 딱 1개만 남습니다! MessageHeader에서 채팅방 하트 꾸욱 눌러 favorite에 넣으면,SidePanel에 Favorite이 업데이트되어 채팅방이 입력됩니다.Favorite 채팅방 목록 나오고, 개수까지 다 잘 나와요;잘 됩니다. 하지만, F5 새로고침을 누르면 Favorite에는 결국, 1개의 채팅방만 나오고 나머지는 싹 다 날라갑니다.최초에 파이어베이스에서 채팅방목록을 모두 못불러오는것 같아요.코드 수정을 해야할 것 같은데요,작성해주신 코드를 보면 잘못된건 없는것 같은데 왜 그럴까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemService updateItem
ItemService의 updateItem 메서드에서 영속성 컨텍스트에 있는 item의 값을 변경하고 있는데,제가 생각했을 때 데이터의 값을 변경하는 것은 repository에서 해야할 것 같은데 service 계층에서 직접 구현해 놓으신 이유가 있나요? repository에 update 관련 메서드를 하나 더 만들 수는 없나요?각자의 역할을 위배하는 느낌이어서 여쭤봅니다ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의에 언급된 개념 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)너무 사소한 질문이지만 작은 부분에서 혼동이 와 구글링 후 질문드립니다.강의시간 7:25 @PostMapping해당 강의에서 구성하신 로직은 API가 아니라고 이해가 됩니다. '다음으로'에서도 API와 분리된 개념으로 말씀하신 것 같습니다. 제가 알기로는 해당 로직도 API의 종류라고 알고 있습니다.강사님이 말씀하신 API는 JSON이나 XML로 응답코드를 얻는 RESTful API를 설명하신 것일까요,,? API 개념에 대한 혼동이 옵니다. 강의시간 11:45 '앞 단이든 서비스 계층이든 id에 대한 권한 여부 체크하는 것을 서버에 로직을 추가'하라고 하셨습니다. 앞 단이든 서비스 계층이든 상관없다고 하셨으니 여기서 말씀하신 서버는 백 단만 말씀하시는게 아닌 것으로 이해하면 되나요? [질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
오타발견해서 적어봅니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.31페이지정리하면대다대매핑을일대다, 다대일매핑으로풀어내서사용하자.대다대매핑->다대다매핑
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 회원정보 저장 오류
회원가입과 돌아오는 페이지는 정상으로 작동은 하나 h2에 저장 되지도 않고 강의 내용처럼 insert 문이 나오지 않습니다https://drive.google.com/file/d/1Mnh-hxiK1AQlaSlFOuuQrzRgAT0lEI9t/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
this 질문
OrderItem에서 전체가격 조회 메소드입니다.여기서 getOrderPrice()대신 this.OrderPrice를 해도 되는지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member Item id 차이
MemberService에서는 member.getId를 해서 id값을 가져와서 확인하는데ItemRepository에서는 item.getId가 null입니다memberService 는 memberRepository에서 저장되고 db에 있는 id를 가져오는게 아니지 않나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Domain별 패키지 분리에 대한 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.항상 좋은 강의 감사드립니다.현업에서 업무를 하다보면 package를 도메인별로 분리하고 도메인에 controller, repository, service, entity, dta, dao등 패키지를 구분하고 있습니다.이는 하나의 모든 controller, repository에 담게 되면 유지보수성이 떨어지기 때문인데요.강의에 강사님께서 하나의 패키지에 넣으셔서 질문을 드립니다.MSA구조로 작게 분리한다고 해도 유지보수가 용의하기 위해서는 패키지를 분리하는게 좋다고 생각되는데요.DTA를 controller에 넣는다던지 entity를 모두 하나에 넣고 있어서...현업에서도 이렇게 쓰는게 더 좋은건지,,,아니면 강의에서만 분리하지 않는 것인지 궁금합니다.혹, 강의에서만 분리하지 않는 구조라면sample로 효율적인 패키지 구성을 제공해 주실 수 있나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findName 질문
이름으로 조회해서 findName을 하면 한명만 조회되지 않나요??리스트로 받는 이유가 궁금합니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 영화 사이트 만들기
npm run dev시 localhost가 자꾸 3000으로 연결됩니다
이렇게 찾을 수 없다는 에러가 뜨는데 어떻게 해야되나요? 다른 분이 질문하신거 보고 package.json에 proxy도 추가해봤는데 안됩니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영한님 강의를 들으면서 내용을 일부 수정해서 공부를 하고 있습니다 . 세션 부분인데요 영한님 강의에서는 JPA 를 사용하지 않았지만 저는 JPA 를 사용해보았습니다. 하지만 계속 WARN 11252 --- [io-8080-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type 'java.util.Optional' to required type 'project.PointWeb.Domain.Member'; Cannot convert value of type 'java.util.Optional' to required type 'project.PointWeb.Domain.Member': no matching editors or conversion strategy found] 이 에러가 발생해서 고민중입니다. Optional 이 문제인 것 같은데 어떻게 변경을 해야 할 지 모르겠습니다. 강의 내용을 조금 변경해서 실습을 하고 있어서 질문드릴까 고민했지만, 해결할 수 있는 방법을 찾지 못해서 질문 드립니다.... 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 관련 질문있습니다.
OrderService에서 order메소드에 public Long order(Member member, Item item) 이런식으로 id가 아닌 엔티티 객체를 바로 받는 식으로 제 개인 프로젝트에서 비슷한 방식으로 해봤습니다.Question과 member가 서로 양방향 매핑관계이구요public class Question { @Id @GeneratedValue @Column(name = "question_id") private Long id; private String title; private String content; private String username; @CreationTimestamp private LocalDateTime dateTime; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; public void setMember(Member member) { this.member = member; member.getQuestionList().add(this); } }public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String emailId; private String username; private String password; private int age; @OneToMany(mappedBy = "member") private List<Question> questionList=new ArrayList<>();OrderService에서 question을 save할 때 public Question save(Member member,Question question) { question.setMember(member); question.setUsername(member.getUsername()); question.setTitle(question.getTitle()); question.setContent(question.getContent()); questionRepository.save(question); return question; }failed to lazily initialize a collection of role: post.study.entity.Member.questionList, could not initialize proxy - no Session(제 개인 프로젝트라 엔티티 경로가 다릅니다.)이런식으로 에러가 나더라구요. 이게 controller 단에서 들어온 엔티티라 해당 서비스 트렌젝션 내에서는 JPA가 관리해주지 않는 준영속 상태 같은 개념인 것 같은데 정확하게 개념이 잡히지 않아서 질문드립니다.public Question save(Long memberId, Long questionId) { Member member = memberRepository.findById(memberId).get(); Question question = questionRepository.findById(questionId).get(); question.setMember(member); question.setUsername(member.getUsername()); question.setTitle(question.getTitle()); question.setContent(question.getContent()); questionRepository.save(question); return question; }id값을 받아서 해당 서비스 트렌젝션 내에서 직접 엔티티를 조회해야 같은 트렌젝션 내에서 엔티티가 JPA에 의해 관리되서 그런건가요? 개념을 정확히 잡고 싶습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 부트 버전
[질문 내용]스프링 부트 2.7.9 버전 쓰면 될까요??3.0.4 도 있는데 둘 중에 뭘 고르면 될까요??