30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
subQuery에서는 fetch를 사용할 수 없을까요?
queryFactory.select(chat.message, chat.id, ExpressionUtils.as( JPAExpressions .select(subChat.count()) .from(subChat) .where(subChat.id.eq(chat.id)), "chatCnt"), ) .from(chat) .fetch();위와같이 쿼리를 작성했을 때 채팅방에 서브쿼리를 넣어서 채팅방마다 참여자 수를 구하도록 서브쿼리를 만들었는데쿼리에서는 서브쿼리에 order by 나 limit 등을 사용해서 조회한 결과 한 건만 서브쿼리로 추가를 할 수 있는데.querydsl에서는 그렇게 할 수 있는 방법이 있을까요??예를들어 위의 쿼리문에 ExpressionUtils.~를 추가해서서브쿼리로 채팅방의 마지막에 작성된 메시지 내용을 같이 가져오고 싶은데 from(chat) 까지는 조회가 잘 되는데(조회가 된다는것은 결과가 이상이 없는건 아닙니다. 결과값이 하나만 나와야 하는데 여러건이 나와서 당연히 문제가 생깁니다.) 서브쿼리에서 limit 제한이나 order by, fetchOne 등을 사용을 할 수가 없는 것 같더라구요..레퍼런스 사이트에서도 관련된 자료를 찾지 못하고, 구글링을 아무리 해봐도 관련 자료를 찾지 못했는데 혹시 위와같은 상황에서는 어떤식으로 처리를 해야할까요??그동안 제가 했던 방법은위의 쿼리로 List로 조회를 한다.마지막 메시지를 가져오는 쿼리문을 따로 조회를 한다.1번에서 쿼리한 결과를 for문을 돌면서 2번에서 조회된 값을 추가한다.이런식으로 작업을 했었는데 쿼리를 두 번 실행을 하고, 거기에 반복문을 돌면서 또 값을 추가를 해야하는 상황입니다. 일반적으로 이런식으로 사용을 하는지, 아니면 위와같은 경우에는 따로 방법이 있는지 문의드립니다.내용을 정리하면채팅방, 채팅유저, 채팅메시지의 3개 테이블이 있습니다.1row에는 채팅방 아이디, 채팅유저정보, 해당 채팅방 아이디에서 작성된 마지막 메시지 내용2번의 정보를 1row에 출력을 하고 싶은데 쿼리를 두 번 돌려서 for문으로 해당 값들을 추가했습니다.3번 방식 말고 다른 방식으로(서브쿼리등) 해결할 수 있는 방법이 있을까요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category 테이블에서 외래키 생성이 안되는 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.데이터 베이스는 MariaDB 10.9 를 사용하고 있는데엔티티 클래스 설계 후 실행하면 Category테이블 생성에 에러가 납니다. Caused by: java.sql.SQLException: (conn=98) Can't create table studying.`category` (errno: 150 "Foreign key constraint is incorrectly formed") 보면 외래키가 설정되지 않은 parent_id 키가 생성이 되어있습니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
intellij에서 검색시 import 구문 제외하고 검색하는법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]10:21 초경에 find in path 사용시 검색결과에 Import 구문은 나오지 않고 순수 작성한 코드만 나오게 되는데, 저는 검색시에 import 구문까지 쭉 나와서 불편합니다.혹시 어떤 설정을 하면 될가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB 설계시 ERD 관련 궁금한 점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]김영한님 혹시 DB를 설계하시거나 설계한 문서를 보실때 따로 ERD를 받아서 작업하시나요? 아니면 DB 자체를 보고 다이어그램으로 뽑아내실까요?DB 설계를 살펴보실때 사용하시는 ERD 툴이나 DB툴이 있으실까요? 예) Exerd (토마토시스템), DataGrip
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemServiceTest 아이템 수정 테스트코드
@Test public void 아이템_수정() throws Exception { // 아이템을 등록하고 수정하고 조회한대로 되었는지 equal 테스트 // given Item book = new Book(); book.setName("책책"); itemService.saveItem(book); // when Item updateBook = itemService.updateItem(book.getId(), "책1", 1000, 10); Item findOne = itemService.findOne(book.getId()); // then Assertions.assertThat(findOne.getName()).isEqualTo(updateBook.getName()); } 아이템 수정 Test 코드를 작성해보았는데 이렇게 작성하는게 맞을까요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[강의에선 벗어나지만 질문 ]@EnableJpaRepositories 가 필요한 이유
안녕하세요. 지금 궁금한 것이 있습니다. 상황 :멀티모듈에 persistence layer 관련한 클래스들(로직, entity, repository 등등)을 몰아 넣고, 다른 프로젝트에서 다운받아서 쓰고 있는 상황 입니다. 질문:component scan, entity scan 으로 해당 persistence 내용의 위치를 명시함과 별개로 enableJpaRespository 를 명시해야 하는 이유가 있을까요?만약 있다면 어떤 이유 때문에 그럴까요?이게 개념을 몰라서 이러는거 같은데, 혹시 해결이 가능할것 같은 문서 링크를 하나 주셔도 감사할것 같습니다. 수고하세요 :)
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
프로젝트 구성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 컨트롤러, 레파지토리 모두 도메인안에 있는 엔티티객체를 사용하였는데 컨트롤러에서는 dto를 따로 만들어서 사용안한 이유가 객체 데이터들이 별차이가 없어서 그런건지 만약 프로젝트가 더 커진다면 컨트롤러에서 사용하는 데이터객체를 따로 만들어야하는지 궁금합니다
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
query 결과를 정렬할 수 있을까요?
List<Board> fetch = queryFactory.select(Projections.bean(Board.class, board.id, board.email, board.title, board.content)) .from(board) .orderBy(board.createdAt.desc()) .fetch();위 쿼리의 결과값에 아래처럼 게시판마다 첨부파일의 수를 추가했습니다.for(Board board : fetch){ Board attachCnt = queryFactory.select(Projections.bean(Board.class, attach.count())) .from(accach) .where(attach.id.eq(board.getId())) .fetchOne(); board.setAttachCnt(attachment.getAttachCnt()); }Board vo에는 게시판 정보와 첨부파일 정보가 있을 경우 join을 사용하지 않고, 두 개의 쿼리로 나눠서 첨부파일의 갯수를 Board vo 에 담았습니다. 이럴 때 위의 쿼리 결과값에서 게시판의 특정정보(id, email)로 정렬을 하는것은 위의 쿼리에서 정렬조건을 넣어주면 간단하게 해결이 되는데아래 추가된 쿼리의 결과인 첨부파일 갯수로 정렬을 해서 글을 보여주려고 할 경우에는 어떤식으로 정렬을 할 수 있을지 문의 드립니다. 하나의 쿼리로 join을 사용하지 않고, 위와같이 분리를 해서 결과값을 합칠 경우에도 정렬을 할 수 있는 방법이 있을까요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문) 검색 버튼 클릭시 검색 조건이 넘어가는 원리에 대해
컨트롤러의 @ModelAttribute("orderSearch") OrderSearch sr의 역할은 아래의 두가지가 맞죠? 주문 상품 리스트의 검색폼 선택 데이터와 매핑<form th:object="${orderSearch}" class="form-inline"> <div class="form-group mb-2"> <input type="text" th:field="*{memberName}" class="formcontrol" placeholder="회원명"/> </div>검색폼에 설정한 데이터를 컨트롤러에서 받기 위한 설정 @GetMapping(value = "/orders") public String orderList(@ModelAttribute("orderSearch") OrderSearch sr, Model model) { List<Order> orders = orderService.findOrders(sr); model.addAttribute("orders", orders); return "order/orderList"; }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
tipp) css 적용 안되시는분들
boot strap 사이트에서 css js 폴더 복붙했는데 안되시면 (버젼 문제일수 있다고 해요) 해결 방법은 다음과 같습니다. 방법:강의 자료에서 코드 다운 받고 아래 폴더에서css jss 폴더 찾으신다음 그대로 static 에 복붙하고reload disk 한번 해주시면 될거에요 ex)jpashop-v20210728\src\main\resources\static
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
레포지터리 검색 테스트 코드 어떻게 짜면 좋을까요?
강의에서 동적 jpql 코드로 주문 검색하는 코드인데 아래 레포지토리 함수에 대해 테스트 코드 예제좀 작성해주시면 감사여 그리고 주문 검색을 querydsl로 작성한 코드도 쉽지 않던데 이거 더 좋은 방법 안나왔나요? public List<Order> findAllByString(OrderSearch orderSearch) { 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(); }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findAllByString 함수의 조건문 설정이 잘 이해가 안되요
public List<Order> findAllByString(OrderSearch orderSearch) { 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(); } 질문:위에서 isFirstCondition이 true 가 아니면 and 를 붙이는게 잘 이해가 안되요 where 도 없는 상태에서 and를 붙이는건가요? code) if (orderSearch.getOrderStatus() != null) { if (isFirstCondition) { jpql += " where"; isFirstCondition = false; } else { jpql += " and"; } jpql += " o.status = :status"; } https://okky.kr/articles/1347075
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 수량이 재고 수량보다 클시 예외 발생 테스트 함수에 대해 (junit5 로직 공유)
@DisplayName("주문 수량이 재고 수량보다 많으면 예외가 발생 해야 한다") @Test void 상품_주문() throws Exception { Member member = createMember(); Book book = createBook("시골 jpa", 10000, 10); int orderCount = 2; // when Long orderId = orderService.order(member.getId(), book.getId(), orderCount); // then Order getOrder = orderRepository.findOne(orderId); System.out.println("getOrder.getStatus ========>> " + getOrder.getStatus()); assertEquals(OrderStatus.ORDER, getOrder.getStatus()); // 주문 상태는 ORDER 이어야 한다 assertEquals(1, getOrder.getOrderItems().size(), "주문한 상품 종류 수가 1이어야 한다."); assertEquals(10000 * orderCount, getOrder.getTotalPrice(), "주문 가격 총합은 가격 * 주문 수량"); assertEquals(8, book.getStockQuantity(), "상품의 재고 수량은 주문한 수량만큼 감소 해야 한다."); }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드를 만들때 클래스 위에 붙여야 하는 필수 annotation 에 대해
junit5 에서도 테스트 클래스 위에 세가지 어노테이션이 모두 필요한가요 @RunWith(SpringRunner.class) 는 junit4에만 필요한거죠?@SpringBootTest@Transactionalclass OrderServiceTest {..}그리고 @Transactional 의 역할에 대해 좀더 자세한 설명 부탁 드려요
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 레포지터리 테스트에 대해 궁금한게 있습니다.
주문 레포지터리 테스트를 하려고 하는데 주문 도메인에 protected 로 되어 있다는데 왜 이렇게 되어 있는거죠? 레포지터리를 직접 테스트하면 안된다는 건가요? 주문 레푀터리 테스트도 작성하는게 바람직한가요? package jpabook.jpashop.repository; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.transaction.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class OrderRepositoryTest { @Autowired OrderRepository orderRepository; @DisplayName("테스트 내용 or 주제") @Transactional @Test public void 주문생성테스트(){ Member member1 = new Member(); member1.setName("hyun"); Address address = new Address("byulnae", "bulam", "220"); member1.setAddress(address); Order order = new Order(); order.setMember(); } }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티나 임베디드 타입 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 자료에 JPA 스펙상 엔티티나 임베디드타입은 자바 기본 생성자를 public 또는 protected로 설정해야 한다고 나와있습니다. 그리고 protected로 설정하는 것을 추천해주셨는데요. 쉽게 말해서 모든 엔티티나 임베디드타입을 개발할때 @NoArgumentConstructor를 넣어주면 괜찮을까요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
memberRepository과 itemRepository의 차이
관련질문을 봐도 이해가 안가 질문드립니다.itemRepository.getid를 하는데 어떻게 null값이 들어있을 수 있는지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
service와 entity 서비스 로직 질문
addStock함수가 entity안에 있어 응집력이 좋아진다는 설명은 이해가 되었습니다. 그런데 어쩔때는 entity에 있어야 되고 어쩔때는 service에 작성해야하는지 그에 대한 기준을 잘 모르겠습니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
saveItem 질문 드립니다.
@Transactional public void saveItem(Item item){ itemRepository.save(item); }여기서 Item을 저장하게 되는데, Item이 cateogry와 연결되어있는걸로 기억합니다.item이 저장될 때, category는 자동으로 저장이 되는건가요?case1category 1번, ItemAcategory 1번, ItemBcase2category 1번, ItemAcategory 2번, ItemB
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Response관련 질문드립니다.
public void addStock(int quantity){ this.stockQuantity += quantity; }위의 코드에서 Return이 없어도 되나요? getStock 메소드는 없는 것 같아서 테스트 코드나 정상작동이 보장되는걸까요(싱글톤 객체라서?)?public void removeStock(int quantity){ int restStock = this.stockQuantity - quantity; if (restStock < 0) { throw new NotEnoughStockException("need more stock"); }여기서 예외가 발생하면, Front로는 어떡해 알 수 있나요?message가 Front로 전달이 되나요?