Spring mappedBy

song yuheon·2023년 9월 6일
0

Spring

목록 보기
61/93
post-thumbnail
post-custom-banner

@OneToMany(mappedBy = "product")는 JPA에서 엔터티 간의 양방향 관계를 설정할 때 사용하는 어노테이션이다. 여기서 mappedBy 속성은 이 관계의 "반대쪽"이 주인임을 나타낸다.

mappedBy의 사용은 주로 관계의 주인이 아닌 쪽에서 사용되며, 데이터베이스 스키마에는 영향을 주지 않는다. 대신, 객체 간의 관계를 설정하고 관리하는 데 사용된다.

mappedBy = "product"


  1. 양방향 관계
    해당 필드는 양방향 관계에서 "비주인" 쪽을 나타낸다.
    "주인" 쪽에서는 @ManyToOne과 함께 실제 외래 키 매핑을 한다.

  2. 관계의 주인
    mappedBy 속성의 값("product")은 연관 관계의 주인이 되는 쪽의 필드 이름이다.
    여기서는 product라는 이름의 필드가 주인이라는 것을 나타낸다.

  3. 데이터베이스 스키마: mappedBy는 데이터베이스 스키마에 직접적인 영향을 주지 않는다. 즉, mappedBy가 지정된 쪽에서는 외래 키를 생성하지 않는다.

  4. 객체 관계의 동기화: mappedBy가 지정된 쪽은 관계의 주인이 아니므로, 연관 관계의 동기화에 영향을 주지 않는다. 실제로 연관 관계를 동기화하려면 "주인" 쪽에서 값을 변경해야 한다.


만약 ProductReview라는 두 엔터티가 있고, 하나의 Product는 여러 Review를 가질 수 있다고 가정하면

@Entity
public class Product {
    @Id
    private Long id;

    @OneToMany(mappedBy = "product")
    private List<Review> reviews;
}

@Entity
public class Review {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;
}

여기서 Review 쪽에 있는 product 필드가 연관 관계의 주인이며, 실제로 product_id라는 외래 키로 매핑된다. 반면 Product 엔터티의 reviews 필드는 mappedBy = "product"를 통해 이 관계에서 주인이 아님을 나타낸다.


profile
backend_Devloper
post-custom-banner

0개의 댓글