본문으로 바로가기

객체 연관관계 VS 테이블 연관관계

category Back-End/JPA 2018. 12. 1. 23:55

ORM에서 가장 어려운 부분으로 손꼽히는 것은 객체의 연관관계를 표현하는 것이다. 
즉 테이블의 연관관계를 엔티티에 매핑하여 표현하는 것을 의미한다. 

연관관계 핵심 키워드

방향
단방향, 양방향이 있다. 예를들어 회원과 팀이라는 관계가 있을때 회원 -> 팀 또는 팀 -> 회원 
이런 식으로 한 쪽으로만 참조하는 것을 단방향 관계라 하고 회원 -> 팀 -> 회원 상호 참조하는 것을 양방향이라 한다. 
방향은 객체에만 존재하며 테이블간 관계는 항상 양방향이다. 

다중성
[일대다(1:N), 다대일(N:1), 일대일(1:1), 다대다(N:M)]이 있다. 예를들어 팀과 회원의 관계에서 
한 팀에 여러 회원이 있을수있으니 팀과 회원은 일대다 관계로 볼 수 있다. 반대로 여려 명의 회원이 한 팀에 속하니 회원과 팀은 다대일이다. 
즉 [팀 1 : N 회원]으로 표현할수있다. 

연관관계의 주인
객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다. 

객체 연관관계 VS 테이블 연관관계

객체 연관관계는 참조(주소)로 연관관계를 맺는다. 
테이블 연관관계는 외래 키로 연관관계를 맺는다. 

객체는 연관된 데이터를 조회할 때 참조를 사용 (object.getRefer()...)한다. 
테이블은 연관된 데이터를 조회할 때 JOIN을 사용한다. 

참조를 사용하는 객체의 연관관계는 단방향이다. 
외래키를 사용하는 테이블의 연관관계는 양방향이다. (A JOIN B 반대로 B JOIN A 도 가능) 
객체를 양방향 참조로 만들려면 단방향 연관관계를 2개 만들어야한다.

자바 ORM 표준 JPA 프로그래밍을 공부하며 정리한 내용입니다.



댓글을 달아 주세요