DB에는 여러종류의 연관관계가 있다. 
one to one, one to many, many to one, many to many까지! 
그 중 one to many관계에 대해 알아보려고 한다. 

one to many

하나의 주체가 여러개의 상태값을 가질 수 있는 형태를 말한다.
entity를 한 개 이상 참조하므로 Collection, List, Map 중 하나를 사용한다.

카트는 여러 아이템을 가지고 있을 수 있으므로 1:N 관계가 성립한다.

cart Table 기본키: cart_id
item Table 외래키: cart_id

public class Cart {

    //...     
 
    @OneToMany(mappedBy="cart")
    private Set<Item> items;
	
    //...
}

우리가 코드로 연관관계를 구현하는 방법은 @OneToMany이다.
데이터베이스의 관계를 반영하는 방식으로 Cart 클래스를 Item 객체의 컬렉션에 매핑한다.

또한 @ManyToOne을 사용하여 각 항목에서 카트에 대한 참조를 추가하여 양방향 관계를 만들 수 있다.
양방향이란 Cart에서 Item에 접근할 수 있고 Item에서 Cart에 접근할 수 있다는 것을 의미한다.

mappedBy 속성은 자식 클래스에서 부모 클래스를 나타내는 데 사용하는 변수를 Hibernate 에 알려주는 데 사용한다.

단방향 / 양방향

  • 테이블의 객체의 특성 파악
  • 테이블: 외래키 하나로 양쪽 조인이 가능하기 때문에 방향이라는 개념 X
  • 객체: 참조용 필드가 있는 쪽으로 참조 가능,
    한 쪽만 참조하면 단방향 / 양쪽이 서로 참조하면 양방향

연관관계의 주인 (Owner)

테이블은 외래 키가 한쪽에 하나만 존재하여 외래 키 하나로 연관관계를 맺는다.
하지만, 양방향으로 맺어진 엔티티의 경우에는 양쪽에 서로 참조하는 필드가 존재한다.

두 엔티티 중에 하나만 외래 키를 관리하는 곳을 연관관계의 주인이라고 한다.
연관관계의 주인의 특징은 다음과 같다.

  • mappedBy 속성을 사용하는 엔티티는 연관관계의 주인이 아니다
  • mappedBy 속성으로 연관관계의 주인이 필드 이름을 지정한다
    보통 외래 키를 가진 테이블과 매핑한 언티티(ex. Comment)가 외래 키를 관리하는 주인으로 선택한다
  • 다대일 양방향에서는 다(N)이 연관관계의 주인이 된다
  • 연관관계의 주인: 외래키 관리하는 참조
  • 주인의 반대편: 외래키에 영향 X, 조회만 가능

1:N의 경우-> 1이 연관관계의 주인이 되는 경우이다.
@JoinColumn 을 사용해서 1쪽에 연관관계 주인임을 표시해야한다 !

reference🌟

https://blog.advenoh.pe.kr/database/JPA-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91-%EC%A0%95%EB%A6%AC/

https://www.baeldung.com/hibernate-one-to-many

https://covenant.tistory.com/260

https://ugo04.tistory.com/108

0개의 댓글