[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을 이용하자.
반응형