영속성관리

도도·2023년 10월 7일
0

JPA

목록 보기
1/1

연관관계의 필요 이유
객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것

객체를 테이블에 맞추어 데이터 중심으로 모델링 시 협력관계를 만들 수 없다

  • 테이블은 외래 키로 조인을 사용하여 연관된 테이블을 찾는다
  • 객체는 참조를 사용해서 연관딘 객체를 찾는다
  • 둘 사이는 큰 간격이 있다

단방향 연관관계

![[Pasted image 20230927112414.png]]
참조로 연관관계 조회 - 객체 그래프 탐색

Member findMember = em.find(Member.class, member.getId());
Team findTeam = findMember.getTeam();

양방향 매핑

![[Pasted image 20230927120511.png]]

@Entity
public class Team{
	@Id @GeneratedValue
	private Long id;

	@OneToMany(mappedBy = "team")
	List<Member> members = new ArrayList<Member>();
}

객체 그래프 탐색

Team findTeam = em.find(Team.class, team.getId());

int memberSize = findTeam.getMembers().size();

양방향에서 객체와 테이블이 관계를 맺는 차이
객체 연관관계 : 2개

  • 회원 -> 팀
  • 팀 -> 회원
    테이블 연관관계 : 1개
    회원 <-> 팀

📍 객체의 양방향 관계
객체의 양방향 관계는 사실 양방향이 아니라 서로 다른 2개의 단방향 관계
테이블은 외래 키 하나로 두테이블의 연관관계를 관리함

연관관계의 주인(Owner)

양방향 매핑 규칙

  • 객체의 두 관계중 하나를 연관관계의 주인으로 지정
  • 연관관계의 주인만이 외래 키를 관리
  • 주인이 아닌쪽은 읽기만 가능
  • 주인은 mappedBy 속성 사용X
  • 주인이 아니라면 mappedBy 속성으로 주인 지정

누구를 주인으로?

🚨 외래 키가 있는 곳을 주인으로 정해라
![[Pasted image 20230927121525.png]]

  • 이 관계에서는 Member 에 외래키가 존재함
  • 따라서 Member가 두 관계중 주인임
  • Team에는 mappedBy 속성을 지정
profile
공부한것 정리하는 중입니다~

0개의 댓글