안녕하세요. 감사한 마음으로 강의를 수강하고 있습니다. 한가지 질문을 드리고 싶어서 글을 씁니다. 강의에서 진행중인 예제가 JPA shop 이잖아요 현재 강의에서는 회원, 상품,주문 정도로 객체가 생성되어 있는데 보통의 쇼핑몰의 경우 상품에 문의글도 있고 리뷰도 있고.. 좀 더 복잡한데 그럼 상품객체에 문의나 리뷰도 모두 연관관계 설정을 해주는게 맞을까요? jpa를 쓰지 않을때는 테이블간에 FK 관계가 있더라도 일단 설정해 놓으면 테스트 하기가 번거로우니까 데이터는 비즈니스에 맞게 넣되 DDL에서 외래키 설정을 강제하지 않는.. 그런 경우가 있었거든요 jpa는 연관관계를 설정하려면 객체 단위로 포함이 되다보니 아직 개념이 아리송 하기도 하네요 비즈니스 로직에 따라 객체간 연관관계 설정을 느슨하게 가져갈 수도 있는지요? 예를 들어 객체단위로 관계를 맺을것을 그냥 DB처럼 컬럼만 외래키 설정을 해준다거나.. 아 그럼 jpa를 쓸 이유가 없어지는 걸까요 ㅜㅜ 책 다시 봐야겠어요 ㅜㅜ
안녕하세요 라이브러리 의존관계를 보면서 궁금한 점이 있어서 질문 드립니다. 현재 스프링에 대한 지식이 많이 부족하여 질문 수준이 조금 낮을 수도 있는 점 양해드립니다. 라이브러리 의존관계란 intellij에서 보여주신 것을 기준으로 하위에 있는 라이브러리가 충족이 되어야 상위 라이브러리를 사용할 수 있는 것으로 이해하면 될까요? 또한 스프링 데이터 jpa와 스프링 web과 관련된 라이브러리를 보면서 스프링 코어가 스프링 데이터 jpa에 속해있었는데 그러면 스프링 web은 spring core에는 의존관계가 없는 것인가요?
JPA 에서 DB 생성시 joincolumn 을 지정해 놓은 것을 foreign key 로 생성해 준다고 하셨는데요. 혹시 설정을 통해 제어할 수 있나요? 전체적으로 생성을 못하게 한다든지 어떤 column 은 FK 로 잡아주고 어떤 column 은 무시하고 개별적으로도 설정이 가능한지 궁금합니다.^^ 좋은 강의 감사드립니다.
연관관계 편의 메서드에 이점을 느끼고 있습니다만... 이를 이해하는데 있어서 상당히 어려움을 느끼고 있습니다. 상품 주문 시 1. 주문한 member 를 조회 2. 주문한 item을 조회 3. 주문한 member address를 통해 delivery 생성 4. 주문한 item, 가격, 상품수를 인자로 주문상품 생성 5. 주문한 member,delivery,orderitem을 인자로 주문생성 주문상품 orderitem은 FK로 item, order를 가지나 주문생성에는 orderItem이 필요하기 때문에 주문상품 생성 시 order를 인자로 전해주지못하고 주문 생성 시 생성된 order를 연관관계 편의메서드를 통해 주문상품 order의 빈자리를 채워주고 있습니다. 주문생성 연관관계 편의 메서드를 보면 양방향 관계인 member, delivery, orderitem을 모두 함께 셋팅해주는데요. 1.member 생성 시 order와는 관계를 맺을 수 없으니 연관관계 메서드 필요없음 2. delivery는 주문 생성 시 함꼐 생성되므로 order 또는 delivery에 연관관계 메서드 생성 3. orderitem은 order가 생성되어야 이후에 fk로 셋팅이 가능하기 떄문에 order에 연관관계 메서드 생성 일단 이렇게 이해를 하고있는데요. 좀더 명확하게 연관관계 메서드가 위치해야하는곳이 어디인가? 라는 물음에 케바케인가 싶기도 하구요. 어느부분을 중점으로 봐야할까요? 김영한님 책도 있긴한데 참고할 부분이 있을까요? 진짜 양방향은 왠만하면 안쓰는게 맞다는 말이 조금은 이해가 됩니다. 1부 빨리 끝내고 2부 들으러 가야겠습니다 ㅋㅋ 추가로 JPA 이후에 계획하고 계신 강의가 있을까요?
entity에는 Setter가 존재하면 안된다는 글을 많이 보았습니다. 때문에 생성자를 통해서만 entity가 만들어지도록 샘플프로젝트를 만들어왔었는데요. 물론 교육이라 setter를 사용하신다고 생각하는데요 실무에서 setter를 entity 내 만들어쓰시는지 생성자를 통해서 해결하시는지 또는 private 처리로 생성 메서드만 노출하는지 궁금합니다. 연관관계 편의 메서드와 생성 메서드 예를 들어주실수 있으실까요? 감사합니다~
전에 1번 완강했었는데 다시 반복 강의 들을때 문제생겨서 올립니다. 3시반30분의 삽질끝에..결국 찾아낸 ㅠㅠ저같은 분이 없으시길.. 이러한 에러가 나오실거에요.. [ 사진 크게 보시려면 아래처럼 마우스 오른쪽키 ] [ 새 탭에서 이미지 열기 ] --------------------------------------------------------- 2.1.9버전까지는 잘됬었습니다 그런데 이번에 2.1.10버전이 나왔더군요.. 그걸 모르고 그냥 이전처럼 맨뒤에 버전으로 받아서 했더니.,. 후... 2.1.10버전은 안됩니다.. 2.1.9버전 이하로 하시면 잘됩니다..
예제에서는 Entity에 Setter가 존재하여 Entity class 내에 set이 가능했지만... 강의에서 강조했듯이 Setter를 제거하고 DTO를 사용을 하게된다면 연관관계 메서드는 DTO내에 존재하게 되는건가요? 아니면 생성자나 builder를 통해서 set 하게 되는걸까요?
안녕하세요 선생님 좋은 강의 너무나 감사드립니다. 다름이 아니고 강좌 듣는도중 궁금한 부분이 있어 질문드립니다. 이전 강의 "도메인 모델과 테이블 설계" 강좌와 이번 강좌내용에서 ORDERS와 DELIVERY는 OneToOne 단방향 매핑이라고 이해를 하였는데 [그림1] - 엔티티 클래스 개발1 강의 내용중 회원엔티티 분석 설계도중 일부 [그림2] - 도메인과 모델과 테이블 설계 강의 내용 강의 29분경 실제 엔티티를 설계하는 부분에선 mappedby를 사용하여 OneToOne 양방향 매핑한거 같아 질문드립니다. [그림3] Order 엔티티 [그림4] Delivery 엔티티 아직 학생인데 선생님 덕분에 JPA를 쓰는 회사로 취업하고싶네요. 좋은 강좌 정말 감사합니다.
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > No tests found for given includes: [jpabook.jpashop.MemberRepositoryTest](filter.includeTestsMatching) * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 4s 테스트 맴버 실행 도중에 위와 같은 오류가 발생하였습니다. 뭐가 문제인걸까요? ㅠ
A->B->C 로 참조가 되어 있어서 A를 지우려면 B를 먼저 삭제하고 B를 지우려면 C가 먼저 삭제되어져야 한다고 했을 때, 만약 C가 A를 참조하게 될 경우 싸이클이 생겨서 서로 삭제가 안되는 문제가 생기는데인. 웹던이나 DB단에서 c->a로 참조를 걸려할 때 잘못된 것으로 인지하고 막고 싶은데. 보통 이럴때는 어떤식으로 해결을 해야하나요?
간단한 조회는 Controller 에서 직접 Repository 를 사용하기도 한다. 라는 설명에 대한 질문입니다. 예제에서는 모든 Transaction 이 Service layer 에서 관리되는데 Controller에서 직접 Repository 를 접근할 때에는 tx 가 암묵적으로 생성되는 것인가요?
안녕하세요? 회원기능 테스트 강의 중 질문드립니다. @Trnasactional이 적용된 @Test에서 persist를 해도 DB에 안나간다고 하셨는데 이는 H2 DB에서만 그런건가요? MySQL도 그런가요? H2의 경우 sequence를 이용해 @GeneratedValue를 관리하는데 (로그 보면), MySQL의 경우는 auto_increment를 사용하면 DB에 한번 다녀와야 (flush되어야 = insert가 나가야) member의 id를 알 수 있는게 아닌가 해서요. 비슷한 사례(?)로 Spring Data JPA에서 .save(entity)만 해도 flush 되서 insert 쿼리가 나가는 것처럼요. 강의 잘 보고 있습니다! 답변 미리 감사드립니다.
회원 서비스 개발에서 validateDuplicateMember를 할 때에 동시에 회원가입이 이루어질 때 방지로 name에 유니크를 걸어 주신다고 했는데 이해가 잘 되지를 않습니다. 보통 이름이 같은 사람도 많은데 name 에 unique를 주어도 되는건지 궁금하고요. 동시에 일어났을 때 방지하는 법에 대해 좀 더 자세히 알고 싶습니다~
안녕하세요! 다름이아니라 제가 수업을 따라해보던 중 @ManyToOne, @OneToMany으로 연관관계를 맺은 두개의 테이블을 조회 시 아래와 같은 에러를 확인하였습니다. @Entity @Table(name = "MEMBER") @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") Long id; @Column(name = "NAME") String name; @OneToMany(mappedBy = "member") List<Post> posts = new ArrayList<>(); } @Entity @Table(name = "POST") @Getter @Setter public class Post { @Id @GeneratedValue @Column(name = "POST_ID") Long id; String title; String description; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") Member member; } Could not write JSON: Infinite recursion (StackOverflowError); 제 생각에는 한쪽에서 다른쪽 테이블을 조회 시 순환참조가 일어나는것 같다고 생각하는데 이러한 경우에는 어떻게 처리를 하여야 하는지 궁금합니다. 찾아보니 @JsonIgnore를 사용하는 방법이 있는것 같기는한데 올바른 방법이 아닌것 같아서 여쭈어봅니다. 좋은강의 감사합니다!