Post

연관관계 처리 entity relationship mapping (Association)

연관관계 처리 entity relationship mapping (Association)

연관 관계 처리 : JPA가 엔티티들 사이의 관계(1:N, N:1, N:N, 1:1)를 자동으로 관리해주는 기능

  • Post → Comment,
  • User → Order,
  • Team → Member 같은 “테이블 간 관계”르 ㄹ객체에서도 자연스럽게 연결해서 사용 할 수 있게 만드는 것.

  • 연관관계 처리 = DB 테이블 관계를 자바 객체 관계로 자동으로 이어주고, 그 관계를 편하게 사용할 수 있게 도와주는 JPA의 기능.

DB에서는 관계를 FK로 관리함

e.g. Comment 테이블 | comment_id | post_id(FK) | content | | ———- | ———– | ——- | 자바 객체에서는 이런 관계가 그냥 숫자로만 존재하면 불편하다

1
2
Comment comment = ...
Long postId = comment.getPostId(); // 이걸로 끝? 너무 불편

그래서 JPA는 객체끼리도 관계를 직접 맺을 수 있게 만들어줌.


JPA의 연관관계 처리 기능들

1) 객체 그래프 탐색

1
comment.getPost().getTitle();
  • 이런 식으로 객체 간을 점(.)으로 계속 탐색 가능.

  • JDBC/MyBatis에서는 절대 불가능 → 직접 JOIN 쿼리 작성해야 함.

2) Mapping Annotation 제공

관계JPA 애너테이션
N:1@ManyToOne
1:N@OneToMany
1:1@OneToOne
N:N@ManyToMany

이걸로 엔티티끼리 직접 연결.

3) 지연 로딩(Lazy Loading)

연관 객체가 필요할 때만 SELECT 실행.

1
2
Post post = postRepository.findById(1L);
post.getComments(); // 이 순간에 SELECT comments...

쿼리 최적화 자동.

4) 영속성 전이(Cascade)

부모 저장하면 자식도 자동 저장.

1
em.persist(post); // comments도 자동 persist 되는 옵션 가능

5) 연관관계 편의 메서드 제공

양방향 관계를 안전하게 설정하기 위한 메서드.

1
2
3
4
public void addComment(Comment c) {
    comments.add(c);
    c.setPost(this);
}

6) 연관관계 수정도 자동 추적 (더티체킹 적용)

1
post.getComments().remove(comment);

이렇게만 해도:

  • comment의 FK(post_id)가 null로 업데이트되거나

  • 삭제되거나

JPA가 알아서 처리.


e.g.

Entity

Post

1
2
@OneToMany(mappedBy = "post")
private List<Comment> comments = new ArrayList<>();

Comment

1
2
3
@ManyToOne
@JoinColumn(name="post_id")
private Post post;

이제 Comment로부터 Post를 이렇게 접근:

1
comment.getPost().getTitle();

Post도 Comment 리스트 접근 가능:

1
post.getComments().size();

이게 “연관관계 처리”의 핵심.


❌ 왜 JDBC/MyBatis는 연관관계 처리가 없을까?

JDBC/MyBatis는:

  • 객체를 관리하지 않음

  • 연관 객체 자동 조회 없음

  • 자동 지연로딩 없음

  • 더티체킹 없음

결국 모든 관계 처리:

  • JOIN 쿼리 직접 작성

  • VO/DTO 조립 직접

  • 관계 수정 시 UPDATE 문 직접 작성

연관관계 관리가 개발자 책임.

JPA 연관관계 처리의 가치

기능설명
객체 그래프 탐색객체끼리 직접 연결해서 탐색 가능
지연 로딩필요할 때만 조회
캐시 활용동일 객체 중복 조회 없음
가독성SQL 로직 사라지고 도메인 로직 중심
유지보수DB 스키마 바뀌어도 코드 구조 크게 안 망가짐
This post is licensed under CC BY 4.0 by the author.