본문 바로가기

자바 ORM 표준 JPA 프로그래밍

5장_연관관계 매핑 기초

엔티티는 단방향 관계이지만, 테이블은 양방향 관계이다.(외래키로 서로 참조할 수 있기 때문)

따라서, 엔티티는 서로 다른 단방향 관계 2개로 양방향 관계를 표현한다.

엔티티는 위와 같이 참조를 사용해서 연관관계를 탐색할 수 있는데 이것을 객체 그래프 탐색이라 한다.

(테이블은 조인)

 

@ManyToOne

@JoinColumn(name="~~")

외래키를 갖고 있는 주인에 위와 같은 어노테이션을 사용한다.

항상 '다'인 부분이 외래키의 주인이다. name 속성의 기본값은 필드명+_+참조하는 테이블의 기본키 컬럼명

 

@OneToMany(mappedBy="~~")

주인이 아닌 부분은 위와 같은 어노테이션을 사용한다.

name 속성의 값은 반대쪽 매핑의 필드 이름이다.

 

조회

  • 객체 그래프 탐색(객체 연관관계를 사용한 조회)
Member member = em.find(Member.class, "member1");
Team team = member.getTeam();
  • 객체지향 쿼리 사용
private static void queryLogicJoin(EntityManager em) {
			String jpql = "select m from Member m join m.team t where " +
            				"t.name=:teamName";
                            
            List<Member> resultList = em.createQuery(jpql, Member.class)
            			.setParameter("teamName","팀1")
                        .getResultList();

연관관계 삭제

연관된 엔티티를 삭제하기 위해서는 기존에 있던 연관관계를 먼저 제거하고 삭제해야 한다.

 

연관관계

  • 연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리(등록, 수정, 삭제)할 수 있다.
  • 주인이 아닌 쪽은 읽기만 할 수 있다.

양방향 연관관계의 주의점

  • 연관관계의 주인에 값을 입력해야 한다.
  • 하지만 객체 관점에서, 양쪽 방향에 모두 값을 입력해주는 것이 가장 안전하다.
  • 따라서 연관관계 편의 메소드를 작성하자.
  • 무한 루프에 빠지지 않도록 기존 관계를 제거하고, 새로운 관계를 설정하자.

정리

1. 단방향 매핑만으로 테이블과 객체의 연관관계 매핑은 이미 완료되었다.

2. 단방향을 양방향으로 만들면 반대방향으로 객체 그래프 탐색 기능이 추가된다.

3. 양방향 연관관계를 매핑하려면 객체에서 양쪽 방향을 모두 관리해야 한다.

'자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

7장_고급 매핑  (0) 2022.01.10
6장_다양한 연관관계 매핑  (0) 2022.01.10
4장_엔티티 매핑  (0) 2022.01.06
3장_영속성 관리  (0) 2022.01.05
2장_JPA 시작  (0) 2022.01.04