본문 바로가기
Java , Spring/Jpa

[JPA] 연관관계

by 방배킹 2023. 10. 8.

다대일 [N:1]

일대다 [1:N]

일대일 [1:1]

다대다 [N:N]

 

단방향과 양방향

Table의 경우 외래키 하나로 양쪽 조인이 가능하다. 즉, 방향이라는 개념이 없다.

하지만 객체의 경우 참조용 필드가 있는쪽으로만 참조 가능하다 (이때 한쪽만 참조하면 단방향이다)

 

다대일 [N:1]

DB기준 외래키가 있는 table이 "다" 이다.

일대다 [1:N]

다대일을 뒤집은 모양으로 다대일과 마찬가지로 "다"에 외래키가 있다.

주의사항 : "일" 의 객체에 변경점이 있을때 "다"의 외래키가 변경된다.

JoinColumn이 "일"에 있음 (OneToMany)

ex) team을 건드렸는데 member table에 업데이트 쿼리가 발생한다.

 

즉 객체와 table의 차이로 인해 문제(?)가 발생한다 -> 다대일을 사용하자

 

일대일 [1:1]

예시) Member와 Locker의 관계. 즉, 회원은 락커를 하나씩만 가질수 있다.

이때 외래키를 Member와 Locker 아무곳이나 넣어도 된다.

하지만 Member table을 많이 사용한다고 하면 Member table에 외래키가 있는것이 유리하다.

다대일과 매우 유사하다 -> 외래키가 있는쪽이 연관관계의 주인이다, 반대편은 mappedBy를 적어준다.

다대다 [N:N]

사용하는것을 추천하지 않는다.

일대대 & 다대일 분리를하고 중간에 연결 table을 만들어서 연관관계를 사용한다.

'Java , Spring > Jpa' 카테고리의 다른 글

[JPA] JPA란? ( ORM, Hibernate, Spring Data JPA)  (0) 2024.01.11
[JPA] 상속관계 매핑  (0) 2023.11.01
[JPA] 엔티티 매핑  (0) 2023.10.06
[JPA] 영속성 관리 - 영속성 컨텍스트  (0) 2023.10.03
[JPA] JPA 시작하기  (0) 2023.10.03

댓글