[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] [1. 일대다 조인] em.createQuery("select m from Team t join t.members m" , Member.class).getResultList(); Member이 N이고 Team이 1일 때 일대다 조인으로 JPQL 쿼리를 Member만 조회되게 작성하면 Member 뿐만 아니라 Team까지 동시에 조회되는 것을 확인할 수 있었습니다. [2. 다대일 조인] em.createQuery("select m from Member m join m.team t" , Member.class).getResultList(); em.createQuery("select t from Member m join m.team t" , Team.class).getResultList(); 위와 같이 다대일 조인에선 제가 원하던대로 Member 조회 시 Member에 대한 조회 쿼리만 나가고 Team 조회 시 Team에 대한 조회 쿼리만 나가는 것을 확인할 수 있었습니다. [핵심 질문] 다대일로 조인할 때는 제가 지정한 객체만 조회되는 것을 알 수 있었습니다. 왜 일대다로 조인할 때는 [1.일대다 조인] 처럼 Member 뿐만 아니라 Team 까지 덩달아 조회되는 건지 궁금합니다 ! ※ 테스트는 전부 지연 로딩으로 진행하였고, [1. 일대다 조인] 에서의 결과는 즉시 로딩과 지연 로딩 상관 없이 같은 결과가 나왔습니다. ※ 각 테스트 간 독립성 확보를 위해 em.flush() , em.clear()로 영속성 컨텍스트를 깨끗하게 하면서 진행하였습니다.
@Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToOne(mappedBy = "parent") private Child child; public void addChild(Child child) { this.child = child; child.setParent(this); } } @Entity @Getter @Setter public class Child { @Id @GeneratedValue private Long id; private String name; @OneToOne @JoinColumn(name = "parent_id") private Parent parent; } 1. Parent와 child코드가 위와 같을 때 아래 코드에서 에러가 발생하는 이유는 양방향 매핑인데 child를 insert하지 않으니 Parent에 있는 child가 없는 것이 되므로 에러가 발생하는 것이 맞나요? Parent parent = new Parent(); Child child = new Child(); parent.addChild(child); em.persist(parent); ------------------------------------------------------------------------------- 2. mappedBy가 양방향 연관관계를 맺어주는 건데 단순히 아래와 같이 Parent에 있는 mappedBy를 없애면 단방향 연관관계로 바뀌는 건가요? (아래와 같이 단순히 mappedBy만 없앤 것과 child를 없앤것은 똑같이 단방향을 의미하게 되는 건가요?) public class Parent { @Id @GeneratedValue private Long id; private String name; // // mappedBy 만 없다면 이것도 child -> Parent 단방향이 되는 건가요? 아니라면 이 코드는 무슨 의미가 되는 코드인가요? @OneToOne private Child child; public void addChild(Child child) { this.child = child; child.setParent(this); } } public class Parent { @Id @GeneratedValue private Long id; private String name; public void addChild(Child child) { this.child = child; child.setParent(this); } } ------------------------------------------------------------------------------- @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToOne(mappedBy = "parent", fetch = FetchType.LAZY) private Child child; public void addChild(Child child) { this.child = child; child.setParent(this); } } @Entity @Getter @Setter public class Child { @Id @GeneratedValue private Long id; private String name; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id") private Parent parent; public void addChild(Child child) { this.child = child; child.setParent(this); } } 3. 위의 코드와 같이 Parent, Child에 둘 다 fetch = FetchType.LAZY를 안하면 아래코드 실행시 join이 발생하는데 왜 발생하는 건가요? (Parent를 조회하는 것이니 Child에 LAZY를 해주어서 child를 조회하지 않게 한다는 것은 이해가 되는데 왜 Parent에도 LAZY를 해주어야 하나요? Parent의 @OneToOne이 EAGER라고 해도 Parent 조회하는 것만 EAGER이니 Parent에는 LAZY를 안해도 되것 같은데 왜 LAZY를 해주어야 하는지 궁금합니다.) Parent parent = new Parent(); Child child = new Child(); parent.addChild(child); em.persist(parent); em.persist(child); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); ------------------------------------------------------------------------------- 4. 3번 질문 코드에서 em.find() 때 쿼리를 보면 select parent와 select child를 하는데 select child 쿼리는 왜 나가는 건가요? LAZY로 동작하지 않고 EAGER로 동작하는 것 같은데 왜 그런건가요? ------------------------------------------------------------------------------- @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToOne(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Child child; public void addChild(Child child) { this.child = child; child.setParent(this); } } @Entity @Getter @Setter public class Child { @Id @GeneratedValue private Long id; private String name; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id") private Parent parent; public void addChild(Child child) { this.child = child; child.setParent(this); } } 5. 강의에서와 같이 리스트인 child를 삭제하려면 findParent.getChildList().remove(0); 과 같이 하는데, @OneToOne의 경우에는 어떻게 하면 되나요? 아래와 같이 Parent의 child 값을 null로 만든 뒤에 remove를 하면 delete 쿼리가 나가는데 이렇게 하면 될까요? 혹시 다른 좋은 방법이 있을까요? Child child1 = findParent.getChild(); findParent.setChild(null); em.remove(child1); 그리고 아래 코드와 같이 하면 삭제가 왜 안되는 건가요? Parent findParent = em.find(Parent.class, parent.getId()); em.remove(child);
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요, 제가 강사님 강의를 듣고 강의 부분에 없는 카테고리 부분을 테스트 해보았는데요 https://drive.google.com/file/d/1ahr-kGf3jim0rx8vVzROBz_Qk_DchCSi/view?usp=sharing 테스트시 초록색표시로 통과는 됐는데 막상 테스트 db로 접속해서 (테스트코드에 transactional commit 어노테이션했습니다). 보려니 테스트 디비로 들어가지지 않습니다 ㅜ 테스트 디비로 들어가는 방법을 잊어서 어떻게 들어가서 확인을 해야하는지 모르겠는데 방법 가르쳐주실 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] window로 libs파일 명까지 왔는데 java -jar hello-spring-0.0.1-SNAPSHOT.jar 하니깐 오류가 떠요 왜 실행이 안될까요 도와주세요ㅠ 자바 버전은 이렇습니다.
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요] 3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요] ( https://www.inflearn.com/blogs/1719 ) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up 으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. ( https://www.inflearn.com/questions/992407/comment/281901 ) 6. ARM 계열의 m1 , m2 계열은 VirtualBox를 통한 구성이 원할하지 않고, 실습 환경의 다변화는 추후 대처하기 어려워서 현재 과정에서는 지원하지 않습니다. ( https://www.inflearn.com/questions/915529 ) [질문 하기] 강의에서 보면 처음엔 kubectl get pod를 사용하다가 deployment를 사용할 때는 kubectl get pods를 사용하던데 입력해보면 동일한 결과가 나타나던데요. 같은 명령인가요? node와 nodes도 결과가 같긴하네요.
[로그인 로그아웃] 강의까지 수강했는데 도저히 막막해서 고민하다가 답답한 마음에 올립니다. 홈-가입-정보입력-로그인 눌러도 정보가 나타나지 않고 로그인/가입도 프로필/알림 이런 게 아예 안 뜹니다. 그리고 로그인탭을 누르면 우리가 만든 로그인 폼이 아니라 시큐리티 로그인으로 이동하고, 시큐리티 로그인을 해도 시큐리티 로그인화면이 localhost:8080/login으로 나올 뿐입니다. 로그인이 잘 돼서 로그인/가입이 프로필/알림 등으로 잘 보일 수 있도록 코드 어떻게 수정하면 좋을지 도와주세요. 가장 마지막까지 작성한 코드입니다. [로그인로그아웃 13:20]까지 수강했습니다. https://drive.google.com/file/d/1D3FexWWHLE0SZrdumtZVRmuqJFP5Atl6/view?usp=sharing
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] EntityManager가 멀티스레드 상황에서 안전하게 작성되있다고 하셨는데 그걸 확인하기 위해서는 어느 부분을 확인하면 될까요? 제가 queryFactory와 비슷하게 작동하는 외산 패키지를 쓰고 있는데 그것도 멀티스레드에 안전한지 확인하고 싶어서 질문 남깁니다.
[질문 템플릿] 1. 예 2. 예 3. 예 [질문 내용] 양방향 매핑 시 순환 참조때문에 toString 메서드에서 StackOverflowError가 발생할 수 있는데, toString 메서드에서 연관관계 참조 부분은 제외하는 방법으로 해결해서 사용하는 것이 일반적인가요? toString 메서드는 AutoValue나 IDE의 도움을 받아 작성하는 것이 일반적인 방법이라고 알고 있는데(이펙티브 자바 등등), 위 방법처럼 stackoverflow만 피하는 것이 옳은 방법인지 궁금해서 질문합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요 HQL과 JPQL의 관계를 정확히 알고 싶습니다. https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html The Hibernate Query Language (HQL) and Java Persistence Query Language (JPQL) are both object model focused query languages similar in nature to SQL. JPQL is a heavily-inspired-by subset of HQL. A JPQL query is always a valid HQL query, the reverse is not true however. Both HQL and JPQL are non-type-safe ways to perform query operations. 라고 되어있는데, 그럼 hibernate 구현체에서 JPQL을 작성하게 되면 hibernate에서 내부적으로 이를 해석한 후 HQL로 변환해서 처리하는 것인가요? OKKY - JPQL 에서 limit 절이 왜 저는 될까요?? JPQL에서 limit절 지원 안된다는 내용을 접했었는데 해당 글에서 처럼 limit을 추가하니 작동을 잘됐습니다. 그래서 찾아보니 HQL이 이를 지원한다라고 되어있는데.. JPQL에선 지원이 안되는데 HQL에서는 지원이 된다라는 내용이 좀 이해가 잘 안가서 둘의 관계에 의문을 갖게 되었습니다 감사합니다
안녕하세요! 다름 아니라 [ Hello JPA - 애플리케이션 개발 강의 ]를 따라가면서 하고 있는데, 강의와 다르게 나옵니다ㅠㅠ 이런 식으로 id 1L인 member를 먼저 등록한 다음, 드래그 한 부분의 id를 2L로 바꿔주고 다시 서버를 띄우면 강사님께서는 서버를 다시 띄워도 이렇게 1L과 2L이 나오는데 저는 서버를 다시 띄우면 2L만 나옵니다. rollback을 안 했는데도 id 2만 등록되어있습니다. 그리고 이렇게 했을 때 강사님께서는 위에 아이디 1과 2의 member가 등록되어있는 상태에서 돌리셨기 때문에 System.out.println("findMember.id = " + findMember.getId()); System.out.println("findMember.name = " + findMember.getName()); 이 부분이 잘 출력되는데 저는 rollback이 되어 출력이 안 됩니다.. 무슨 차이일까요? 강사님께서 제공해주신 <최신 프로젝트 설정하기>로 다운로드 받아 진행하였습니다.
안녕하세요 데브위키님 강의 수강 중 궁금한 점이 있어 질문 드립니다. 제가 지식이 얕아 틀릴 확률이 매우 큰데 저의 생각이 맞았는지 틀렸다면 지적도 부탁드립니다! 클라우트 네이티브 애플리케이션에서의 MSA는 수평 확장이 용이하다고 PART5에서 이해했습니다. 만약 DB 서버를 늘려야 한다고 했을 때 현재 강의에서처럼 Postgre를 도커 볼륨을 사용하여 이중화 DB를 사용한다면 AWS에서 새로운 인스턴스를 만들어서 도커를 설치하고 컨테이너를 만들게 되면 기존 서버의 도커 볼륨에 있는 데이터를 알 수 없어 서버를 늘리기가 힘들다고 생각합니다. 당연히 방법이 있을 것 같은데 확장을 하게 된다면 어떤 방식으로 확장을 하게 되는 건지 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. spring-io에서 만들어서 intellj에서 실행했는데 실행이 되지가 않습니다 뭐가 문제일까요 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.