묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
김영한 강사님의 수업중에 궁금한 점이 있어서 질문드립니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의를 수강중인데 궁금한 점이 생겨서 질문드립니다.OrderItem과 Item이 단방향 다대일관계라고 나와있는데, 다른 것들은 다 양방향인데 왜 예네들만 단방향인건가요?그리고 "하나의 주문상품은 여러 개의 상품을 주문할 수 있으니" 다대다 아닌가요?? 하나의 상품도 여러 개의 주문상품에 들어갈 수 있으니" 양방향 관계 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade, 연관관계 사용 기준 질문.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 듣고 있습니다.cascade,연관 관계를 사용하는 기준이 궁금해서 질문 글을 작성합니다.1.cascade 질문제가 이해한 바로는 엔티티를 영속성 컨텍스트 관리를 받기 위해 persist 등록하는 것이며 각 엔티티는 따로따로 persist를 해야 되는데 cascade를 사용하면 하나의 엔티티를 persist할 때 그와 연관된 엔티티를 같이 해주는 것으로 이해했습니다. Order 코드에서 OrderItem과 Delivery에 cascade가 적용됐는데 Member에는 적용을 안 하는 것 같더라고요. 왜 Member는 안 하는지 궁금합니다. 연관 관계 질문order와 연관된 엔티티 간에 연관관계 메소드를 통해 한쪽에서 서로 등록해주는 것은 이해가 가는데 Item과 Category간에는 어느 쪽에도 연관 관계 메소드가 없는 이유가 궁금합니다. Item과 Category 이 둘은 약간 상수? 느낌이라서 연관 관계를 지을 필요가 없는 것일까요? 답변 주시면 정말 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 단방향은 무조건 피해야 하나요?
일대다 단방향 매핑에서 다음의 두가지 단점이 있다고 말씀해 주셨습니다.추가적인 update 쿼리의 실행엔티티가 관리하는 외래 키가 다른 테이블에 있음그런데 일대다 단방향 매핑을 맺을 때 updatable=false와 nullable=false를 추가하면 update 쿼리 없이 한 번에 insert 쿼리만 나가는 것을 확인했습니다.@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) @JoinColumn(name = "parent_id", nullable = false, updatable = false) private List<Child> children = new ArrayList<>();물론 부모 자식간 관계가 변하지 않고 라이프사이클이 완전 동일한 경우에만 활용할 수 있을 듯 합니다.그럼 update 쿼리가 추가적으로 나가는 것은 해결한 셈인데 이런 경우에도 엔티티가 관리하는 외래키가 다른 테이블에 있다는 단점에 의해 다대일 양방향을 맺어줘야 할까요? 복잡한 실무에서는 그 패러다임 불일치가 많은 영향을 주나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시를 이용한 연관관계 설정 시 잘못된 id값을 받았을 경우에 대해 질문드립니다!
단순히 연관관계 설정을 위해 엔티티를 사용하는 경우, 프록시로 조회(em.getReference || Data JPA의 경우 getById()) 형태로 조회한다고 알고 있습니다. 연관관계 설정을 위해 필요한 값은 id뿐인데, 굳이 엔티티의 다른 필드 정보까지 조회하기 위한 쿼리를 날리지 않는 편이 좋으니까요. 이 점과 관련해서 동료들과 이야기를 나누던 중 얘기가 나왔었는데, - 위와 같은 방식으로 연관관계를 맺을 경우 id값이 잘못된 값일 때 문제가 발생한다. 는 이야기를 들었습니다. 제 생각에는 정확한 id값 전달의 경우 id값을 전송하는 쪽의 책임이고, 그런 일이 나올 경우에 대비하는 것에 비해 프록시를 이용해서 조회 쿼리를 한 번 절약하는 이득이 더 크다고 생각했습니다. 하지만 방어적 코드를 작성하는 편이 좋다라는 측면에서 동료들의 말에도 일리가 있어서 고민이 되었습니다. 현업에서도 프록시를 이용해 연관관계를 맺는 방식을 사용하실 것 같은데, 위 경우에 대해 어떤 방식으로 별도의 처리를 해주시는지, 이 문제에 대해 어떻게 생각하시는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드 사용 목적 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요. 강의 정말 너무 잘 듣고 있습니다! ㅠㅠ JPA 무지한이던 제게 정말 큰 도움이 됐습니다. 강의를 다 듣고 복습중인데, 연관관계 편의 메서드 관련해서 궁금한 게 있어서 질문드립니다. public void setMember(Member member){ this.member = member; member.getOrders( ).add(this); } 를 통해 Order 엔티티에 member 정보를 넣어줌과 동시에 Member 엔티티에 order 정보를 넣어주는데요, 두 엔티티 모두에 값을 셋팅해주기 위함인 건 알겠는데, 실제로 어떤 상황에서 쓰이는지 잘 모르겠습니다. 위와 같이 연관관계 편의 메서드를 통해 Member의 order에 값을 넣어주면, service 등에서 order.setMember(member); 를 해주었을 때, 별도의 Member 객체를 생성해서 setOrders()를 해주지 않아도, member.getOrders(); 를 통해 해당 멤버에 저장된 order 정보들을 가져올 수 있다는 것까지는 알겠는데, 실제로 이게 어떤 상황에서 쓰이는 건지 잘 모르겠습니다. DB의 member 테이블에서는 order 관련 정보를 안갖고 있는데(그래서 변경감지로 Member 테이블을 업데이트 해주는 것도 아닐텐데), Member 엔티티 order 정보를 넣는 게 왜 필요한지 설명 부탁드립니다. 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계메서드 관련 질문
[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 이번 강의에서 연관관계 메서드에 관한 질문이 있어서 여쭤봅니다 양방향 맵핑이 되어있는 관계에서는 연관관계 메서드를 이용하는것이 편리하다고 하셨는데 Category 와 Item 도 양방향 관계이므로 Category Class에서 public void setItems(Item item){ this.items.add(item); item.getCategories().add(this);} 이런식으로 연관관계 메서드를 추가해도 괜찮은건지 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관 관계 매핑 vs 매 번 참조 객체 쿼리 날리기 성능 질문
안녕하십니까 최근 선생님의 수업들을 열심히 듣고 제 것으로 만들기위해 정진하는 학생입니다. 다른 것이 아니라 일반 게시판의 댓글 기능을 구상 중입니다. 현재 상황 엔티티 댓글, 멤버 의도하는 기능 추후 댓글 작성자의 닉네임을 클릭하면 해당 작성자의 프로필 페이지를 보여줄 것이다. 연관 관계 현재는 댓글이 작성자(멤버)를 단방향으로 연관관계를 가지고 있다. 궁금한 점 댓글들을 불러올 때 연관되어있는 댓글 작성자(멤버) 또한 select문으로 불러오는 것을 확인 중인데, 그로 인하여 쓸 데없는 정보까지 불러와진다.(사용자의 로그인id, 비밀번호 등) -> DTO로 처리 중 그러면 댓글 작성자(멤버)의 id(기본키)와 닉네임만 댓글 엔티티에 저장 후 누군가 댓글 작성자의 프로필 페이지 확인 시 별도로 쿼리를 날려 프로필 페이지를 들고오는 것이 더 효율적인 것인가? 라는 의문입니다. 성능적인 차이가 별로 나지 않을 경우 저는 연관관계 매핑 후 DTO로 처리하는 것이 확장성에서 더 유리하다고 생각합니다. 이에 대해 현업에서 어떻게 사용하는 지 힌트 살짝만 주실 수 있을까요? 아니면 키워드라도 알려주시면 제가 찾아서 더욱 공부하겠습니다. 김영한 선생님의 수업을 들으며 궁금한 점은 항상 검색하여 해결하였으나 데이터베이스 설계는 진짜.. 도저히 함부로 손을 못대고 있습니다. 아마 말씀해주셨는데 제가 놓친 것 일 수도 있습니다. 죄송합니다 추가적으로 스프링 고급편 출시하는거 축하드립니다. 백엔드에서 자주 쓰이는 디자인패턴과 관점 지향 프로그래밍 전반적인 부분이 정말 궁금했었는데 유용한 수업이 될 것 같습니다. 감사합니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 연관관계
안녕하세요 영한님! 연관관계 매핑에 대해 궁금한 점이 있어 질문 드립니다! @Entitypublic class Section { @ManyToOne private Point startPoint; @ManyToOne private Point endPoint;} Section (구간) 이라는 Entity 가 있고 구간의 시작과 끝을 표현하는 Point 라는 Entity가 있습니다 그리고 이들의 관계는 다음과 같습니다! A - B - C - D 라는 거리가 있을때 1 구간(Section) : A(point), B(point) 2 구간(Section) : B, C 3 구간(Section): C, D 1. 이들의 연관관계는 ManyToOne 이 맞는 것일까요? 2. Section이 연관관계의 주인이고 이는 단향뱡 관계 입니다 이때 굳이 ManyToOne 이라는 연관관계를 표현해줘야 할 필요가 있는 것인가요? 단지 명시적으로 보여주기 위함일까요? 강의 항상 잘 보고 있습니다! 감사합니다!