묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
섹션6-주문 도메인 개발-주문 기능 테스트
[질문 내용]상품주문_재고수량초과 테스트할 때 Junit5 사용해서 expected가 없습니다.import static org.junit.jupiter.api.Assertions.*; @Test public void 상품주문_재고수량초과() throws Exception { //given Member member = createMember(); Item item = createBook("시골", 10000, 10); int orderCount = 11; //when //then assertThrows(NotEnoughStockException.class, ()-> orderService.order(member.getId(), item.getId(), orderCount)); }그래서 이렇게 작성해서 초록불은 떴는데적절하게 작성했는지 궁금합니다.더 좋은 예시가 있는 지 궁금합니다.
-
미해결실전! Querydsl
sort관련 질문드립니다.
직접 파라미터를 받아 처리하는걸 권장 한다고 하셨는데 @Data public class MemberSearchDto { private String username; private String teamName; private Integer ageGoe; private Integer ageLoe; private String sort; private String orderBy; } sort=desc; orderby=username 으로 값을 받는다면 .orderBy(addSort(searchDto.getSort(),searchDto.getOrderBy())) private OrderSpecifier<?> addSort(String sort, String orderBy) { if(StringUtils.hasText(sort) && StringUtils.hasText(orderBy) && (sort.equals("desc") || sort.equals("asc"))){ if(orderBy.equals("username")){ return sort.equals("desc") ? member.username.desc() : member.username.asc(); } } return member.age.desc(); } 이런식으로 처리하면 되는지 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
사용자 정의 함수가 안됩니다..
persistence.xml 하이버네이트 6.2.2 final 입니다.<persistence-unit name="jpql"> <!-- spring --> <class>jpabasic.ex1hellojpa.jpql.Product</class> <class>jpabasic.ex1hellojpa.jpql.Address</class> <class>jpabasic.ex1hellojpa.jpql.Team</class> <class>jpabasic.ex1hellojpa.jpql.Member</class> <class>jpabasic.ex1hellojpa.jpql.Order</class> <properties> <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/jpabook" /> <property name="jakarta.persistence.jdbc.user" value="sa" /> <property name="jakarta.persistence.jdbc.password" value="" /> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql " value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit>아예 빨간줄이 나오면서 등록이 되지 않아요.. 도와주세요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
서브쿼리에서 사용한 ALL에 대한 궁금증이있습니다.
제가 작성한 JPQL 입니다"select o from Order o where o.orderAmount > ( select x.stockAmount from o.product x)"강사님이 작성한 JPQL 입니다."select o from Order o where o.orderAmount > ALL ( select x.stockAmount from o.product x)"// 전체 상품 각각의 재고보다 주문량이 많은 주문들이 조회를 하기 위해서 JPQL을 작성했는데요 첫번째 코드나 두번째 코드나 결과는 같다고 생각이 들었어요두 코드 모두select p2_0.stockAmount from Product p2_0 where p2_0.id=o1_0.product_id이 코드가 동작하게 되는데Product와 Order는 1:M인 관계로 stockAmount는 (1x1)이 나오게 되는데ALL을 사용할 이유가 있나해서 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Stream 잘하고 싶어요
안녕하세요 강의 잘 듣고 있습니다.저도 우빈님처럼 람다, 스트림을 잘 쓰고 싶습니다!어떻게 공부하면 좋을지 알려주실 수 있나요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
AppConfig클래스에 대해 질문있습니다 ㅎㅎ
안녕하세요 강의 6분에 PasswordEncoder 빈등록을 AppConfig 클래스를 하나 추가로 만들어서 하셨는데 저는 SecurityConfig에 추가로 등록해도 괜찮을것같다는 생각이들었는데 AppConfig을 추가했을때 어떤 이점이 있다고 생각하셔서 하신건지 궁금합니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 모델과 테이블 설계 부분 다이어그램 툴 질문
어떤 툴을 (버전까지..) 사용하셔서 다이어그램을 그렸는지 궁금하고또 3가지 다이어그램이 각각 어떤 다이어그램인지 종류별로 알려주시면 감사하겠습니다...제가 프로젝트 만들기전에 StarUML 5.1 버전로 구체적으로 그려보려고 하는데, 김영한 선생님이 그린것과는 다른느낌으로 그려져서 이게 클래스 다이어그램인지, 오브젝트 다이어그램인지 엔티티다이어그램인지 도통 모르겠어요ㅜ1번)2번3번)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 후
H2 DB에 테이블도 생기고 테스트 모두 완료 후(강의시간 20분 정도 모두 완료) cmd에서 gradlew clean build하니 테스트 모두 오류 뜨면서 localhost 8082도 연결도 끊겼고 intellij에서도 access 됐던 테스트가 모두 되지 않는 상태입니다.intellij에서는 현재 이런 오류가 발생하며 코드는 모두 강의자료에서 복붙해둔 상태고 Junit5 사용중입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 Database 초기 설정 문제
안녕하세요! 강의 섹션1 h2 데이터베이스 설치 관련해서 따라하던중 오류가 발생해 문의글남깁니다.지난 입문편 강의를 들을때 h2 데이터베이스를 잘 활용했고 이번에 jpa강의를 들으며 h2 데이터베이스를 생성하고 있는데 연결이 안되는 문제가 발생했습니다.우선, 저는 스프링부트 3버전으로 진행을 하고 있어 입문편 강의록에서 안내해주신대로 h2 2.1.214버전으로 진행중입니다.윈도우 사용자라 h2.bat파일을 실행하고, h2 console이 열린 다음에url을 localhost로 변경하고 JDBC URL에 jdbc:h2:~/jpashop을 입력하고 연결하기를 눌렀더니 아래와 같은 에러가 발생합니다.관련 디렉토리를 찾지 못해서 발생하는 에러라고 생각되어 해당 경로인 C:/Users/user에 jpashop이라는 폴더를 만들어 다시 실행해봐도 결과는 똑같았습니다. 또한, 해당 jpashop 폴더가 저희 프로젝트 폴더의 경로와 동일해야하나하는 의문이 들어 제 프로젝트 파일은 E드라이브에 있는데, 프로젝트 폴더를 옮겨야하나.. 하는 의문이 들기도 합니다. 경로 설정 문제인듯한데 적절한 해결책을 알려주시면 대단히 감사하겠습니다 .. 저는 환경설정이 너무 어려워요 ㅠ.ㅠ 하하...https://abcdefgh123123.tistory.com/331 이글 보고 해결했습니당 참고하세요 다들!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
패치조인 할 경우 궁금한게 있습니다.
패치 조인시 연관된 엔티티를 한번에 조회 하는 걸로 이해했습니다.근데 LAZY 가 아닌 EAGER 로 연관관계를 했을 경우도한번에 가져오는 걸로 아는데,String query = "SELECT t FROM Team t JOIN t.members "; List<Team> resultList = em.createQuery(query, Team.class) .getResultList(); for(Team team: resultList){ System.out.println("team : " + team.getName() + ", member size = : " +team.getMemberList().size()); }위에 코드를 실행했을 경우, EAGER로 연관관계 설정을 해서패치 조인과 같이 한번에 조회 될거라고 생각되었는데, 그렇치 안더라구요. 이유를 알 수 있을까요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
1편과 2편의 차이점?
2편을 먼저 구매하여 수강중입니다. 1편과 겹치는 내용이 많다고 하셨는데, 1편을 보면 2편과는 다른 무언가를 얻을 수 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
could not initialize proxy 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 수강중에 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일때 프록시를 초기화 하면 해당 예외가 나온다고 들었습니다. 강의 중에는 나중에 개발하다가 이런 에러를 만나면 지금 말한걸 생각해주시면 된다 까지만 말씀해주셨는데요.. ㅎ 사실 제가 저 에러메세지를 해결못하고 있던차에 지금 강의를 수강한거라 그 해답이 궁금합니다. 혹시 강의의 부분이 could not initialize proxy 에러를 해결하는데 도움이 될까요? JPA기본편 강의 내용이 아니어도 좋습니다. 영한님 강의중에 이 부분을 실제 개발하시며 다루시는 부분이 있는지 궁금합니다.
-
미해결실전! Querydsl
데이터 조회에 대해서 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]entity로 반환 후에 DTO에 맵핑하는 방식이 쯤 더 효과적인지 아니면 DTO프로젝션으로 진행하는게 효과적인지가 궁금합니다.아니면 상황에 따라서 적절하게 쓰는게 좋다면 어떠한 상황인지 궁금합니다.
-
미해결실전! Querydsl
한 테이블 내 같은 컬럼 여러개 or 처리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요, 강의를 듣다 궁금한게 생겨 질문드립니다..! '/filter?price=중저가라인,고가라인'처럼 url로 넘어온 price인자 String을 ,단위로 쪼개 List에 넣은 뒤 쿼리를 짜기를 원합니다. 현재 select * from table where price = '중저가라인' or price = '고가라인'; 과 같은 쿼리를 원합니다. 여기서 고가라인이 동적으로 조건에 포함될 수도 있고 안될 수도 있는 상황입니다. 어떤식의 로직이 필요한지 설명을 부탁드려도 될까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
Fixture 사용에 있어서...
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 이렇게 사용해도, 하나의 도메인에 여러 Builder Fixture가 생기게 될까요? public class Fixture { public static ProductBuilder aProduct() { return Product.builder() .productNumber("001") .name("아메리카노") .price(1000) .type(ProductType.HANDMADE) .sellingStatus(ProductSellingStatus.SELLING); }} final LocalDateTime registeredDate = LocalDateTime.now();final Product product1 = createProduct(ProductType.HANDMADE, "001", 1000);final Product product2 = createProduct(ProductType.HANDMADE, "002", 3000);final Product product3 = createProduct(ProductType.HANDMADE, "003", 5000);final Product product4 = Fixture.aProduct().productNumber("004").price(7000).build();
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
검증을 사용할때
만약 Member에 검증이 필요하다고 하면검증객체를 따로 클래스로 만들어서 사용하나요?엔티티에 덧붙여서 사용하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.find 시 쿼리문 2번 수행
답변 없으셔서 다시 남깁니다. 영속성 컨텍스트 2 강의의 약 7분 쯤 em.find를 2번하게 되어도 1차캐시 조회에 의해 쿼리문이 한번만 출력된다고 하셨는데저는 2번 출력되네요.. 문제가 뭘까요 https://drive.google.com/drive/folders/1rLlWTlGVWyFRoL-HXbvyWREnpHBC7OBe?usp=sharing 추가로 질문이 하나 더 있는데강의에서는 JPAMain 자바 파일의 try문을 수행하면 db에 바로 저장이 되는데저는 저장이 안됩니다.이것도 한번 확인 부탁드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
지연 로딩 관련 에러 발생합니다.
기존 강의에다가 JWT token + security 를 적용하여 프로젝트를 하고 있는데 , failed to lazily initialize a collection of role: study.wonyshop.user.entity.User.orders, could not initialize proxy - no Session 오류가 발생합니다. 원인을 찾아보니 이 오류는 지연로딩된 컬렉션을 사용하는 도중에 세션이 종료되어서 발생하는 문제입니다. User 엔티티에서 orders 컬렉션을 지연로딩으로 설정하였기 때문에 실제로 컬렉션에 접근할 때 데이터베이스 연결이 필요하며 세션이 닫힌 상태에서는 접근할 수 없습니다.package study.wonyshop.user.entity; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import study.wonyshop.common.TimeStamped; import study.wonyshop.delivery.Address; import study.wonyshop.order.entity.Order; //import study.wonyshop.order.entity.Order; @Entity @Table(name = "USERS") //테이블 user 예약어 있어서 사용할 수 없음) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends TimeStamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id", nullable = false) private Long id; @Column(nullable = false, unique = true) private String email; @Column(nullable = false, unique = true) private String nickname; @Column(nullable = false) private String password; @Column(nullable = false) private Address address; @Setter private String profileImage; @Column(nullable = false) @Enumerated(value = EnumType.STRING) private UserRoleEnum role; @Column(nullable = false, unique = true) private String phoneNumber; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List<Order> orders = new ArrayList<>(); //todo 즉시로딩 필요함 -> fetch 조인 생각 할것 /** * 결제 수단은 포인트로 가능 ! 하다는 가정 */ @Column(nullable = false) private int point = 1000; // 기본 가입 포인트 private Boolean inUser; // 추후 휴면계정 관리 할때 사용 하기 위함 @Builder public User(String email, String nickname, String password, Address address, String profileImage, UserRoleEnum role, String phoneNumber) { this.email = email; this.nickname = nickname; this.password = password; this.address = address; this.profileImage = profileImage; this.role = role; this.phoneNumber = phoneNumber; } // admin , seller 용 @Builder public User(String email, String nickname, String password, Address address, String profileImage, UserRoleEnum role, String phoneNumber, int point) { this.email = email; this.nickname = nickname; this.password = password; this.address = address; this.profileImage = profileImage; this.role = role; this.phoneNumber = phoneNumber; this.point = point; } /** * 소비자가 -> 셀러 에게 지불 * * @param totalPrice */ public void payForOrder(int totalPrice) { int restPoint = this.point - totalPrice; if (restPoint < 0) { throw new IllegalArgumentException("포인트가 부족합니다. 포인트 충전 후 다시 이용해 주세요."); } this.point = restPoint; } /** * 셀러가 판매해서 받은 돈 * @param totalPrice */ public void receivePayment(int totalPrice) { this.point += totalPrice; } /** * 취소 시 환불 * @param refundPayment */ public void refundPayment(int refundPayment){ this.point -= refundPayment; } }package study.wonyshop.order.entity; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import study.wonyshop.common.TimeStamped; import study.wonyshop.delivery.Delivery; import study.wonyshop.delivery.DeliveryStatus; import study.wonyshop.orderItem.OrderItem; import study.wonyshop.user.entity.User; @Entity @Table(name = "ORDERS") @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order extends TimeStamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "order_id", nullable = false) private Long id; @ManyToOne(fetch = FetchType.LAZY) //연관관계 주인 @JoinColumn(name = "user_id") private User user; // 주문자 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "delivery_id") private Delivery delivery; //배송정보 @Enumerated(EnumType.STRING) private OrderStatus status; //ORDER, CANCEL private LocalDateTime orderDate;// 주문 날짜 @Builder public Order(User user, Delivery delivery, OrderStatus status, LocalDateTime orderDate) { this.user = user; this.delivery = delivery; this.status = status; this.orderDate = orderDate; } //--- 양방향 연관관계 편의 메서드 ------// 편의메서드는 컨트롤 하는 쪽에 만들어주면 됨 // 다 쪽이 연관관계 주인으로 값 의 변경사항은 주인쪽에서 함 // 다 쪽 : 일의 값은 set 으로 저장 // 일 쪽 : 리스트(다) 를 조회하여 add // order : user = m :1 public void setUser(User user) { this.user = user; user.getOrders().add(this); } //이때 이것을 호출 하기전에 세션이 종료되어 에러 발생 //order : orderItem = 1: m public void addOrderItem(OrderItem orderItem) { this.orderItems.add(orderItem); orderItem.setOrder(this); } // order : delivery = 1: 1 public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); } public void setOrderDate(LocalDateTime orderDate) { this.orderDate = orderDate; } public void setStatus(OrderStatus status) { this.status = status; } //===== 생성 메서드 =====// //OrderItem... orderItems에서 ...은 가변 인자를 선언하는 부분입니다. 이는 OrderItem 타입의 인자를 0개 이상 받을 수 있다는 의미입니다. //Order order = createOrder(user, delivery, item1, item2); public static Order createOrder(User user, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setUser(user); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order; } //--- 비지니스 로직 -------// /** * 주문취소 */ public void cancel(){ if(delivery.getDeliveryStatus() == DeliveryStatus.COMP ) { throw new IllegalStateException(" 이미 배송이 완료된 상품은 취소가 불가능 합니다. "); //Non-cancellable product } this.setStatus(OrderStatus.CANCEL); // 주문 상품을 다 취소 시켜야함 for(OrderItem orderItem : orderItems){ orderItem.cancel(); } } //=== 조회 로직 =====// /** * 전체 주문 가격 조회 */ public int getTotalPrice(){ int totalPrice = 0; for(OrderItem orderItem :orderItems){ totalPrice += orderItem.getTotalPrice(); } return totalPrice; } } @PostMapping("") public OrderResponse orderItem(@AuthenticationPrincipal UserDetailsImpl userDetails , @RequestBody OrderRequest orderRequest) { Long itemId = orderRequest.getItemId(); int quantity = orderRequest.getQuantity(); return orderService.orderItem(userDetails.getUser(), itemId, quantity); }@Service @RequiredArgsConstructor public class OrderService { private final OrderRepository orderRepository; private final ItemRepository itemRepository; private final UserRepository userRepository; private final DeliveryRepository deliveryRepository; @Transactional public OrderResponse orderItem(User user, Long itemId, int quantity) { Item findItem = itemRepository.findById(itemId).orElseThrow( () -> new CustomException(ExceptionStatus.NOT_EXIST) ); //userRepository.findByIdWithOrders(user.getId()); //배송 생성 Delivery delivery = new Delivery(user.getAddress(), DeliveryStatus.READY); // 주문상품 생성 OrderItem orderItem = OrderItem.createOrderItem(findItem, findItem.getPrice(), quantity); // 주문생성 Order order = Order.createOrder(user, delivery, orderItem); deliveryRepository.save(delivery); userRepository.save(user); orderRepository.save(order); return new OrderResponse(order); }}이 상태에서 //userRepository.findByIdWithOrders(user.getId());이 주석 된 부분에 이처럼 user 객체를 가져올때 오더와 함께 가져오는 페치조인을 사용해봤지만 이번 엔 user가 null 값이라는 에러가 납니다. ㅠㅠㅠ 아무리 머리를 굴려도 ㅠㅠㅠㅠㅠ 해결이 안되네용 ㅠㅠㅠ 페치조인 코드 는 아래와 같이 작성했습니다. public interface OrderRepository extends JpaRepository<Order,Long> { @Query("select u from User u join fetch u.orders WHERE u.id = :userId") User findByIdWithOrders(@Param("userId")Long id); } 해결방법은 FetchType.EAGER이걸 적용하면 되는데 eager 적용하지 않고 하는 방법 없을까요 ㅠㅠ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL,Fetch = FetchType.EAGER orphanRemoval = true) private List<Order> orders = new ArrayList<>();
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
불변 제약 대체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! 불변 객체를 공부하다 궁굼점이 생겨 문의드립니다.부작용 차단을 위한 불변 제약을 두는 대신Member.classpublic void setAddress(Address address) { this.address = new Address(address); } Address.classpublic Address(Address address) { this.city = address.city; this.street = address.street; this.zipcode = address.zipcode; }와 같이 항상 새로운 객체를 생성하여 할당하는 방식을 사용한다면 값 변경에도 자유로울 수 있을 것 같은데 문제될 수 있는 부분이 있을까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
JdbcTemplate
제가 이클립스를 사용하고 있는데 JdbcTemplate 에서 오류가 나요,, build.gradle파일에서 아래와 같이 의존성 설정도 했습니다.. 구글링을 해봐도 잘모르겠어서 여쭤봅니다ㅜ...implementation 'org.springframework.boot:spring-boot-starter-jdbc'runtimeOnly 'mysql:mysql-connector-java'