spring boot/JPA - 기본

JPA - 연관관계 매핑(2)

ballde 2021. 11. 8. 23:18

@ManyToOne

단방향, 양방향

  • 테이블 - 외래 키 하나로 양쪽 조인가능
  • 객체 - 참조용 필드가 있는 쪽으로만 참조 가능
  • 객체 양방향 관계는 참조가 2군데가 있어서 외래키를 관리할 곳을 정해야함
  • 주인의 반대편: 외래 키에 영향을 주지 않음
  • 단순 조회만 가능
  • 다쪽에 외래키가 있음
@ManyToOne
@JoinColumn(name="team_id")
private Team team;

@OneToMany(mappedBy = "team")
private List<Member> memberList = new ArrayList<>();

 

 

@OneToMany - 잘 안쓰임..

테이블에는 다쪽에 외래키가 있어서 외래키가 매칭이 맞지 않음

⇒ 다대일 양방향이 더 좋다.

@ManyToOne
@JoinColumn(name="team_id")
private Team team;

@OneToMany(mappedBy = "team")
private List<Member> memberList = new ArrayList<>();

 

@OneToOne

Member - Locker와의 관계

 

Member

@OneToOne
@JoinColumn(name="locker_id")
private Locker locker;

 

Locker

@OneToOne(mappedBy="locker")
private Member member;

 

일대일은 정답이 없음

 

@ManyToMany

Member 입장
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();

Product 입장
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();

* 편해보이지만 한계가 있음
다대다는 매핑 정보만 들어가고 다른 정보를 넣을 수가 없음
중간 테이블이 숨겨져있어서 쿼리가 이상하게 날라갈 때가 있음

 

 

 

'spring boot > JPA - 기본' 카테고리의 다른 글

JPA - proxy(프록시)  (0) 2021.11.13
JPA - 상속관계 매핑  (0) 2021.11.08
JPA - 연관관계 매핑  (0) 2021.10.26
jpa - 엔티티 매핑  (0) 2021.10.21
JPA - 기본 개념과 영속성  (0) 2021.10.18