ORM에서 가장 어려운 부분으로 손꼽히는 것은 객체의 연관관계를 표현하는 것이다.
즉 테이블의 연관관계를 엔티티에 매핑하여 표현하는 것을 의미한다.
연관관계 핵심 키워드
방향
단방향, 양방향이 있다. 예를들어 회원과 팀이라는 관계가 있을때 회원 -> 팀 또는 팀 -> 회원
이런 식으로 한 쪽으로만 참조하는 것을 단방향 관계라 하고 회원 -> 팀 -> 회원 상호 참조하는 것을 양방향이라 한다.
방향은 객체에만 존재하며 테이블간 관계는 항상 양방향이다.
다중성
[일대다(1:N), 다대일(N:1), 일대일(1:1), 다대다(N:M)]이 있다. 예를들어 팀과 회원의 관계에서
한 팀에 여러 회원이 있을수있으니 팀과 회원은 일대다 관계로 볼 수 있다. 반대로 여려 명의 회원이 한 팀에 속하니 회원과 팀은 다대일이다.
즉 [팀 1 : N 회원]으로 표현할수있다.
연관관계의 주인
객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다.
객체 연관관계 VS 테이블 연관관계
객체 연관관계는 참조(주소)로 연관관계를 맺는다.
테이블 연관관계는 외래 키로 연관관계를 맺는다.
객체는 연관된 데이터를 조회할 때 참조를 사용 (object.getRefer()…)한다.
테이블은 연관된 데이터를 조회할 때 JOIN을 사용한다.
참조를 사용하는 객체의 연관관계는 단방향이다.
외래키를 사용하는 테이블의 연관관계는 양방향이다. (A JOIN B 반대로 B JOIN A 도 가능)
객체를 양방향 참조로 만들려면 단방향 연관관계를 2개 만들어야한다.
자바 ORM 표준 JPA 프로그래밍을 공부하며 정리한 내용입니다.