[WEB]Back-end/JPA

다양한 연관관계 매핑

이운형 2022. 1. 10. 11:56
반응형

인프런 김영한의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 공부하면서 정리한 글입니다.

종류

@ManytoOne

@OneToMany

@OneToOne

@ManyToMany

 

핵심 : 연관관계의 주인은 왜래키를 갖고 있는 객체가 되야한다.

 

@ManytoOne

Many 쪽에 연관 관계가 왜래키를 갖고있고 연관관계의 주인이 된다.

 

 

@OneToMany

One쪽이 주인인데 Many쪽에 왜래키를 갖고 있다.

@JoinColumn을 사용해서 꼭 명시해 줘야한다! 아니면 DB에 중간 테이블이 하나 생성된다,

엔티티의 왜래키가 다른 테이블에 있으므로 연관관계시 UPDATE SQL문이 한방 더 나간다.

 

@OneToOne

case 1 ) 주 table에 왜래키 있는 경우

=> 주 table 조회시 대상 table에도 데이터가 있는지 확인이 가능하다

=> but! 값이 없으면 왜래키에 null을 허용한다.

 

case2) 대상 table에 왜래키 있는 경우

=> 1:1 에서 1 : many 관계로 변경해도 테이블 구조는 유지 가능하다

=> 프록시의 한계로 인해 fetch = fetchType.Lazy 사용이 불가능 하다. // 튜닝의 어려움, 성능 최적화의 어려움

 

@ManyToMany == 쓰지말자.

Member 와 product를 바로 양방향 mapping해서 사용은 불가하다!

 

Member Product
Member_id(PK)
username
product_id(pk)
name

굳이 쓰고 싶다면 중간에 연결 table을 형성해서 1대 다  다:1 형식으로 풀어서 진행해야한다.

Member Member_Projuct Product
Member_id(PK)
username
Member_id(pk,fk)
product_id(pk,fk)
orderMount
orderdate
product_id(pk)
name

 

중간 table만들면 나중에 운영의 어려움 존재, member_id를 조회했는데 orderdate 혹은 orderMount까지 조회될수 있으니 그냥 쓰지 마!

 

연관관계의 주인은 왜래키를 갖고 있는 객체가 되야한다를 만족하는

@ManyToOne을 이용하자.

반응형