• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

OneToMany, ManyToOne 의존성 주입 질문입니다.

22.02.11 10:25 작성 조회수 172

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
 
@Getter
public class Parent {
    @Id 
    @Column(name = "parent_id")
    private Long id;

    @OneToMany(mappedBy = "parent")
    private List<Child> childList = new ArrayList<>();
}

public class Child {
    @Id
    @Column(name = "child_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private parent;

    public Child(parent) {
        this.parent = parent;
        parent.getChildList().add(this);
    }
}

 

child 를 생성 할때 양방향 의존성 주입을 위해
parent.getChildLIst().add(this) 를 해주는 데요 만약 childList 에 100만건이 있으면

생성을 할때 마다 100만건을 조회 하게 될것 같은데 문제가 없을까요?

 

답변 1

답변을 작성해보세요.

0

안녕하세요. d1215님

이런 경우 문제가 됩니다. 그래서 이런 경우에는 양방향 연관관계를 사용하지 않습니다.

감사합니다.

d1215님의 프로필

d1215

질문자

2022.02.12

직접 답변해 주셔서 정말 감사합니다!!

그렇다면 이렇게 되는 경우 무조건 단방향으로 설정을 해줘야 하는걸까요?

아니면 무조건 parent 가 존재한다는 가정하에 child 를 생성할때 아래 처럼

child 에만 parent에 의존성 주입을 해주면 문제가 없을까요?

@Getter
public class Parent {
    @Id 
    @Column(name = "parent_id")
    private Long id;

    @OneToMany(mappedBy = "parent")
    private List<Child> childList = new ArrayList<>();
}

public class Child {
    @Id
    @Column(name = "child_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private parent;

    public Child(parent) {
        this.parent = parent;
    }
}

 

한쪽 방향이 100만건 정도 되는 경우라면 단방향으로 설정해주셔야 합니다. 혹시라도 반대쪽을 조회하게 되면 OOM이 발생할 수 있습니다. (하지만 해당 ID에 한정해서 조회하기 때문에 실제 이런 경우는 거의 없겠지요?)

참고로 JPA는 양방향 연관관계가 있는 경우 연관관계의 주인이 아닌쪽에 데이터를 넣지 않아도, 반대쪽을 조회할 수 있습니다.(양방향 연관관계 부분을 복습해주세요.)

감사합니다.

d1215님의 프로필

d1215

질문자

2022.02.19

감사합니다. 해결했습니다. : )