• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

연관관계 메서드와 CASCADE의 관계

23.04.24 19:59 작성 23.04.24 20:30 수정 조회수 457

0

  1. //==연관관계 메서드==// 가 주석으로 달린 메서드들이 연관관계에 있는 객체에 값을 넣어줄 때 반대편에도 자동으로 값을 넣어주는 역할을 하는 메서드가 맞나요?

     

  2. 이렇게 따로 메서드를 구현해주는 이유가 있나요? CASCADE 옵션을 사용하면 어차피 알아서 다 해주지 않나요 ?? 기본편에서 설명해주셨다고 했는데 어떤 강의를 다시 수강해보면 될까요 ?

     

  3. 지연로딩에서 ***ToMany의 디폴트는 Lazy고, ***ToOne의 디폴트는 Eager인 이유가

     

    ***ToMany같은 경우 하나만 불러와도 기본적으로 수많은 값이 따라오기 때문에 스프링 측에서 Lazy로 해놓았고, (Member의 Order을 조회하면 수많은 Order이 자동으로 따라오기 때문에 디폴트가 Lazy)

     

    ***ToOne의 경우 객체 하나만 조회하면 쿼리문을 하나밖에 더 날리지 않기 때문에 Eager로 해놓았지만, 실무에서는 테이블 전체를 조회할 때가 있기 때문에 디폴트값인 Eager를 쓰지 않고 Lazy를 사용한다 이게 맞을까요? (Order하나만 조회하면 Member 1개만 따라오기때문에 디폴트가 Eager지만, select o from Order o 와 같은 쿼리문으로 Order를 전체 조회했을 때는 Order에 따른 멤버가 전부 따라오므로 그냥 Lazy 옵션을 준다)

     

    이렇게 이해했는데 맞을까요?

답변 1

답변을 작성해보세요.

1

codesweaver님의 프로필

codesweaver

2023.04.25

안녕하세요, hjemsti 님! 공식 서포터즈 codesweaver 입니다.

1,2. 네 맞습니다. cascade 옵션을 사용할 경우 한개의 엔터티를 영속화 하면 종속 엔터티도 영속화 하긴 하지만 순수 자바 코드에서 객체끼리 서로 연결되지는 않았기에 객체 탐색을 할 수 있도록 상호간의 참조를 넣어주어야 합니다. 그래서 연관관계 메서드(혹은 편의메서드)를 제공하여 처리하도록 안내하고 있습니다 :)

JPA 기본편은 여기 를 참조하여 주세요.

 

3 네 이해하신 내용이 맞습니다 :)

감사합니다.