묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요
안녕하세요.orderItem엔티티가 장바구니라고 생각하면 안되나요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
영속성 컨텍스트와 트랜잭션 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의 후반부에 최악이 아닌 경우(한 명의 회원이 2개의 Order를 가질때) 영속성 컨텍스트에 멤버가 있기 때문에 멤버조회 쿼리가 1번 덜 나간다고 설명해주셨는데요. 같은 트랜잭션이어야 동일한 영속성 컨텍스트를 바라보기 때문에 강의에서 설명한 내용이 들어맞을 거라 생각하는데요. 강의에서는 트랜잭션을 설정해주는 부분이 안보여서요. 혹시 트랜잭션을 따로 설정하지 않으면 같은 리퀘스트 스코프 내에서는 동일 트랜잭션을 보장하는 기본설정??같은게 있는건가요? 아니면 혹시 제가 놓친 부분이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
저같은 실수 없으시길 ㅜㅜ
[질문 내용]이런 바보같은 실수 하시는 분은 잘 없으시겠지만... 실제 소스하고 테스트 소스하고 패키지 구조가 같아야하네요..ㅎㅎ; 실제 OrderService를 jpabook.jpashop밑이 아닌 jpabook 밑에다가 Service 패키지 만들어서 테스트 코드에서 OrderService 빈 객체를 생성을 못하더라구요한시간 반 주고 배웠습니다...!! ㅋㅋㅋㅋ 이런 질문글 아무도 없길래 구냥 남기고갑니다..!!o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@3e74829] to prepare test instance [jpabook.jpashop.service.OrderServiceTest@6d4f266]org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jpabook.jpashop.service.OrderServiceTest': Unsatisfied dependency expressed through field 'orderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'jpabook.service.OrderService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:417) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:119) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43) ~[spring-boot-test-autoconfigure-2.7.10.jar:2.7.10] at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) ~[spring-test-5.3.26.jar:5.3.26] at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) ~[spring-test-5.3.26.jar:5.3.26] at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) ~[spring-test-5.3.26.jar:5.3.26] at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) ~[spring-test-5.3.26.jar:5.3.26] at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.run(ParentRunner.java:413) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) ~[spring-test-5.3.26.jar:5.3.26] at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[junit-4.13.1.jar:4.13.1] at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) ~[junit-rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) ~[junit-rt.jar:na]Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'jpabook.service.OrderService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.26.jar:5.3.26] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.26.jar:5.3.26] ... 32 common frames omitted
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
User class의 id 값 질문입니다
안녕하세요 강사님. 강의를 듣다 질문이 생겨 글 남깁니다.평소에 습관적으로 spring boot로 개발을 할 때에, User class에@Idprivate Long id;위와 같은 코드를 붙이곤 하는데요, 강사님 강의에선 response dto에만 id값이 들어가 있어서 질문 드립니다! 도메인 클래스에는 없어도 상관 없는 것일까요?항상 좋은 강의 감사드립니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 교재 MemberRepositoryTest p14 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberRepositoryTest에 @SpringBootTest를 사용했는데, @DataJpaTest로는 안되는 건가요 ?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
두 테이블에 동일한 PK를 복합키로 사용했을때 JPA 연관관계 매핑
table : prodPlanpk : factoryCode, prodplanIdcolumn : itemCode ...table : Itempk : factoryCode, materialCodecolumn : itemName... 테이블 구조는 이렇고 저는 MSSQL을 연동해서 기본적인 테이블 생성은 MSSQL에서 생성하여 사용하고 있습니다. prodPlan(N) : item(1) 로 ManyToOne 매핑을 하려고 하는데요 @Entity @IdClass(ProdPlanId.class) public class ProdPlan { @Id private String factoryCode; @Id private Long prodplanId; @Column(name = "ITEM_CODE") private String itemCode; //... @ManyToOne @JoinColumn(name = "FACTORY_CODE",referencedColumnName = "FACTORY_CODE",insertable = false, updatable = false) @JoinColumn(name = "ITEM_CODE",referencedColumnName = "MATERIAL_CODE",insertable = false, updatable = false) private Item item; } @Entity @IdClass(ItemId.class) public class Item { @Id private String factoryCode; @Id private String materialCode; //... }@JoinColumn에 name 속성이 외래키의 이름을 정의하는거라고 알고 있습니다. factoryCode는 외래키가 아니고 두 테이블에서 복합키이자 기본키입니다.(복합키는 class ProdPlanId implements Serializable을 사용하여 @IdClass 어노테이션을 사용하였습니다.)그래서 위에 코드와 같이 구현을 하면 FACTORY_CODE가 중복컬럼에러가 나서 일단 insertable, updatable = false로 임시해결을 했는데 해결을 한게 아닌 거 같아서 다른 방법이 있나 찾아보던 중 inheritancetype.table_per_class 이 구조가 조금 비슷해보여서 진행하려 했으나 @JoinColumn에서 어떻게 사용해야 하는지 모르겠습니다. (factoryCode는 외래키가 아닙니다! 찾아보니 일대일 매핑만 나왔습니다ㅠㅠ)읽기전용이 아닌 prodPlan 테이블의 ITEM_CODE와 Item 테이블의 MATERIAL_CODE를 조인하려 했는데요. 그럴려면 @Column itemCode를 지우고 사용해야 중복컬럼에러를 피할 수 있었습니다. @Column itemCode를 선언하고 조인하는 방법은 없을까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝트 생성부터 문제에 부딪혔습니다.
안녕하세요, Hello JPA - 프로젝트 생성 에서 Windows의 IntelliJ IDEA 2023.1(Community Edition) 설치해서 File->New->Project 들어갔는데 강의 화면과 다른 관계로 오류가 있는거 같습니다.저는 maven 이 없어서 maven archetype 을 선택하고, Catalog에 internal, default local, maven central 바꿔가면서 add archetype 에서 영한 강사님이 예시로 보여준 문구들을 넣어서 프로젝트를 만들었는데요, 아래와 같은 오류 메세지가 뜹니다.The desired archetype does not exist (jpa-basic:ex1-hello-jpa:1.0.0) 최신 IntelliJ로 프로젝트 생성을 위해서는 어떻게 설정해야 할까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JpaRepository save 에 비해서 saveAndFlush 사용하면 문제점이 있을까요?
강사님 안녕하세요~ 스프링 JpaRepository 의 save , saveAndFlush 가 있는데 리포지토리.save(엔티티)리포지토리.saveAndFlush(엔티티) 저는 개발자 입장에서 디버깅 할 때 제가 작성한 코드가 바로 db에 넘어가는 파라미터값과, db에 바로 적용 되는걸 보고 싶어서저는 saveAndFlush 를 선호해서 사용하고 있습니다. save 메서드에 비해서 ( save 는 캐시?에 저장하고 있다가 나중에 한꺼번에 반영이 되니 눈으로 바로 볼수 없어요 ㅠㅠ )saveAndFlush 를 쓰면 비지니스 로직을 적용하거나 서비스 로직 적용 시문제 가능성 부분이 혹시 있을까요?알려 주신 다면 유념해서 생각해 보려구 합니다 (참고로 저희 회사 시스템에는 @Transactional 애노테이션만 걸어주고 강사님 강의에서 처럼 em.persist => 이부분은 사용하지 않습니다 ) #김영한#JpaRepository#saveAndFlush#save#문제점#jpa#스프링#스프링프레임웍
-
미해결실전! Querydsl
정렬을 했을때 몇번째 raw인지 조회
안녕하세요 만약에 시험 점수를 관리하는 테이블이 있다면 그 시험점수를 기반으로 순위를 매길려고 할때정렬된 테이블 중에서 제가 가져온 raw가 테이블에서 몇번째로 값이 높은 raw인지 알 수 있는 키워드는 없나요? 설령 없다면 해당 비즈니스 로직은 어떻게 처리를 해줘야 될까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
7:31초쯤 영속성이 끊긴 멤버 반환
안녕하세요. 많이 찾아봤는데 없는것같기도 하고, 7:31초쯤을 시작으로 영속상태가 끊긴 멤버가 반환이 된다라는 말씀을 듣고 질문드립니다. Service에서 반환이 되는 Controller에서 Entity Manager를 사용하기 위해서 @PersistenceContext 어노테이션을 사용해서 em을 주입받았습니다.# MemberApiController# MemberService# 로그이렇게 됬을때 PK가 1인 Member를 Controller에서 찾아보았는데, 만약에 영속성이 끊긴 Member가 반환이 된다면 로그에 "???"이라는 문구 사이에 Select문을 통해서 PK가 1인 멤버를 가져와야하지 않나요? 영속성컨텍스트에서 관리를 하지 않은 Member를 반환했고, 그 Member를 다시 찾으려고 시도하기때문입니다.# EntityManager.contains 사용영속성 컨텍스트에서 관리되는 Object인지 확실히 확인하기 위해서 EntityManager의 contains 메서드를 통해서 확인해보았을때 로그가 아래와 같이 나왔습니다.결론적으로 memberService.update를 통해서 반환된 Member객체는 영속성이 끊기지 않은 객체이지 않나요??감사합니다 :D
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA Composite key(복합키) @IdClass , @EmbeddedId 어떤 걸 쓸 지 장단점 및 선정 기준이 궁금합니다
강사님 안녕하세요~ 저희 플랫폼회사에서는 @EmbeddedId 만 쓰고 있고강사님의 책을 읽어 봤을 때는 @IdClass -> db 스럽다@EmbeddedId -> 객체 스럽다, id.컬럼 으로 좀 더 코드가 더 들어간다라고 표현하십니다. 강사님이 실전 실무에서 JPA Composite key(복합키) @IdClass , @EmbeddedId둘중에 어떤걸 선호호고 많이 쓰는지 장단점 뭔지,배달에민족 시스템에서는 어떤 이유로, 둘 중 어떤 걸 사용 하는지 알 수 있을까요? --█●●--------------------------------------------#김영한#@IdClass#@EmbeddedId#join#조인#멀티#컬럼#여러개#multiple#column#JPA--█●●--------------------------------------------
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 8:33 내용 질문드립니다.
회원 1이 DB에서 팀을 가져온 후, 팀 A가 영속성 컨텍스트에 존재하는 것은 알겠습니다!근데 "회원 2가 JPA에게 팀 A를 달라고 한다" 는 부분이 이해가 잘 되지 않습니다!프록시 팀 객체가 어떠한 근거로 팀 A를 달라고 하게 되나요? 첫 SELECT문과, 회원 1이 팀을 가져오는 쿼리 로그를 보니,뭔가 팀 ID를 들고 있는 것 같은데, 첫 SELECT문에서 가져온 결과의 팀은 비어있긴 한데 ID는 들고 있는 상태로 존재하는 것이 맞을까요?
-
미해결실전! 스프링 데이터 JPA
엔티티에 setter 메소드를 구현하지 않았을 때, PK 값의 저장 과정에 대해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 평소에 생각하지 못했던 부분인데, 강의를 들으면서 좀 궁금한 점이 생겨서 질문드립니다.. 만약 엔티티에 setter 메소드를 구현하지 않았다면,@GeneratedValue를 사용해서 데이터가 DB에 저장될 때 PK값이 생성되도록 했다면, 그 생성된 PK값이 영속성 컨텍스트에서 관리되는 엔티티 객체에 어떻게 저장되는 것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ORDERS와 DELIVERY 관계에 대한 질의입니다.
안녕하세요. 강의 수강 도중 제가 이해를 잘하지 못하여 질문 남기게 되었습니다. 16:28~ 부분에서주문과 배송의 경우 일대일 단방향 관계라고 말씀하셨는데, 회원 엔티티 분석 이미지를 보았을 때Order 에서 delivery: Delivery,Delivery 에서 order: Order 이면단방향이 아니라 양방항 관계인 것 같은데 왜 단방향 관계인지 궁금합니다. ㅜ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입에서 insert 쿼리는 뜨는데 h2 db에 저장이 안됩니다.
yml 파일spring: #띄어쓰기 없음 datasource: #띄어쓰기 2칸 url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true defer-datasource-initialization: true logging: level: org.hibernate.SQL: debug # org.hibernate.type: traceMemberController 파일package jpaproject.jpashop.controller; import jpaproject.jpashop.domain.Address; import jpaproject.jpashop.domain.Member; import jpaproject.jpashop.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import javax.validation.Valid; @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("/members/new") public String createForm(Model model){ model.addAttribute("memberForm",new MemberForm()); return "members/createMemberForm"; } @PostMapping("/members/new") public String create(@Valid MemberForm memberForm){ Address address = new Address(memberForm.getCity(), memberForm.getStreet(), memberForm.getZipcode()); Member member = new Member(); member.setName(memberForm.getName()); member.setAddress(address); memberService.join(member); return "redirect:/"; } }콘솔창h2 데이터베이스도저히 원인을 모르겠네요 도와주세요
-
미해결실전! 스프링 데이터 JPA
클린 아키텍처에서 JPA
클린 아키텍처 (및 헥사고날) 설계 시 JPA 영속성 계층을 어디에 두어야하는지 궁금합니다.일반적으로 해당 아키텍처에선 영속성 계층을 도메인 계층에서 분리시켜야 한다고 주장하던데 (육각형 안 Entity는 POJO이며, JPA Entity는 바깥의 Adapter에 구현하고 Mapper로 변환하는 형식), 이렇게 되면 JPA가 제공하는 lazy loading이나dirty checking 등의 이점은 포기해야 되는것일까요?도메인 모델에 JPA 코드를 사용하자니 이러한 아키텍트 원칙에 위배되는거 같고, 그렇다고 이걸 분리해놓으면 따로 구현해야될게 많아지니 고민입니다..타협을 한다면 어느 방식으로 하는게 좋을까요? 애초에 이러한 아키텍트 방식과 JPA는 (지향점이 다르기에) 어울리지 않는 것일까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
초록색 주석문은 뭔가요 .. !
pdf 교안 보면 이런식으로 되어있는 초록색 주석문? 이 있던데그냥 인텔리제이에서는 // 나 /* */ 했을 때 회색으로만 표시되고 저렇게 초록색으로는 안 표시되더라구요 ... 저거는 뭔가요 ?생성 단축키도 알려주시면 감사하겠습니다 ...
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
join과 join fetch 의 차이 ..
OrderQueryRepository 에 findAllByDto_flat 보면다 join 으로 되어있는데 join과 join fetch (페치 조인)의 차이점은 뭔가요 ..?join도 lazy 로 되어있는거 한번에 끌고오는 건 비슷한 거 같은데 .. ㅜ
-
미해결
JPA Update 반영이 되지 않습니다.
안녕하세요! JPA를 사용해서 간단한 장바구니 프로젝트를 진행하고 있습니다.장바구니에 들어있는 아이템의 수량을 수정하는 테스트코드를 작성하고 있었습니다.수정할 장바구니아이템 자체는 수정이 되었지만, 장바구니에 들어있는 수정을 요청한 아이템은 수량이 반영되지 않았습니다.혹시 연관관계나 영속성 문제인가 싶어서 게시판<-> 댓글로 테스트코드를 짜보았는데, 게시판 <-> 댓글 테스트코드는 성공하였습니다. 혹시 어떤 문제인지 알 수 있을까요? 아래는 장바구니와 장바구니아이템 연관관계 입니다!@Entity @Table(name = "tbl_cart") public class Cart { @Id @Column(name = "cart_id", columnDefinition = "BINARY(16)") private final UUID id = UlidCreator.getMonotonicUlid().toUuid(); ... @OneToMany(mappedBy = "cart", fetch = FetchType.LAZY) private final List<CartItem> cartItems = new ArrayList<>(); protected Cart() { } private Cart(User user) { this.user = user; } public static Cart create(User user) { return new Cart(user); } public void addCartItem(CartItem cartItem) { cartItems.add(cartItem); } ... }@Entity @Table(name = "tbl_cart_item") public class CartItem { @Id @Column(name = "cart_item_id", columnDefinition = "BINARY(16)") private final UUID id = UlidCreator.getMonotonicUlid().toUuid(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "cart_id") private Cart cart; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; @Column(name = "amount") private int amount; protected CartItem() { } private CartItem(Cart cart, Item item, int amount) { this.cart = cart; this.item = item; this.amount = amount; } public static CartItem create(Cart cart, Item item, int amount) { return new CartItem(cart, item, amount); } ... } 아래는 장바구니아이템의 수량을 수정하는 로직입니다!@Transactional @Override public void updateCartItemAmount(UUID userId, CartCommand.UpdateCartItemAmount command) { User user = userRepository.getUser(userId); Cart cart = cartRepository.getCart(user); cart.validateHasSameUser(user); CartItem cartItem = cartItemRepository.getCartItem(command.cartItemId()); cartItem.updateAmount(command.amount()); } 아래는 실패한 테스트코드 입니다!@DisplayName("장바구니 아이템의 수량을 변경한다.") @Test void 장바구니_아이템의_수량을_변경한다() { //given cartService.addCartItem(user.getId(), CART_아이템_요청); //when Cart cart = cartRepository.findByUserId(user.getId()) .orElseThrow(CartNotFoundException::new); CartItem cartItem = cartItemRepository.findByCartAndItem(cart, item) .orElseThrow(CartItemNotFoundException::new); CartCommand.UpdateCartItemAmount CART_아이템_수량_변경_요청 = CartCommand.UpdateCartItemAmount.builder() .cartItemId(cartItem.getId()) .amount(3) .build(); cartService.updateCartItemAmount(user.getId(), CART_아이템_수량_변경_요청); Cart actual = cartRepository.findByUserId(user.getId()) .orElseThrow(CartNotFoundException::new); assertAll(() -> { assertThat(cartItem.getAmount()).isEqualTo(3); assertThat(actual.getCartItems().get(0).getAmount()).isEqualTo(3); }); }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키 다 대 일 단방향 연관관계 @ManyToOne @Fetch 설정 방법 문의 드립니다.
강사님 안녕하세요 ~ 아래 질문은 먼저드린 질문과 다른 질문입니다.아래 첨부이미지 확인해주세요 저는 ComCorpUser.bizCd / teamCd 와ComBizTeam 에 있는 복합키의CombizTeamPK 의 속에 있는 bizCd / teamCd 와@ManyToOne @Fetch 애노페이션 연결 고리를 걸어서다대일 단방향 연관관계를 맺고 싶습니다.ComCorpUser 클래스의 java 파일을 어떻게 만들어야 할까요?강사님이 직접 1개의 클래스 java 파일을 만들어서보여 주실 수 있을까요?