Spring

@OneToMany(mappedBy =

MDanderson 2023. 4. 26. 06:50

mappedBy 속성은 @OneToMany와 @OneToOne 어노테이션에서 사용됩니다. 이 속성은 양방향 관계에서 관계의 "주체"가 아닌 "반대쪽" 엔티티에 설정됩니다.

@ManyToOne 어노테이션에는 mappedBy 속성이 없습니다. 대신, @ManyToOne 측에서는 필요한 경우 외래 키(ForeignKey)를 정의할 수 있습니다. 이는 @JoinColumn 어노테이션을 사용하여 설정할 수 있습니다.

예를 들어, Post와 Comment 엔티티 사이에 양방향 관계를 설정하려면 다음과 같이 코드를 작성할 수 있습니다.

위 코드에서, Post 엔티티는 @OneToMany 어노테이션과 함께 mappedBy 속성을 사용하여 관계의 "반대쪽"임을 나타냅니다. 반면에, Comment 엔티티는 @ManyToOne 어노테이션과 함께 @JoinColumn 어노테이션을 사용하여 관계의 "주체"임을 나타냅니다. 이렇게 함으로써 양방향 관계가 구성됩니다.

 

 

OneToOne 관계에서 mappedBy 속성은 양방향 관계에서 관계의 "주체"가 아닌 "반대쪽" 엔티티에 설정됩니다. 예를 들어, User 엔티티와 UserProfile 엔티티 사이에 양방향 OneToOne 관계를 설정하려면 다음과 같이 코드를 작성할 수 있습니다.

위 코드에서 User 엔티티는 OneToOne 어노테이션과 함께 mappedBy 속성을 사용하여 관계의 "반대쪽"임을 나타냅니다. 반면에 UserProfile 엔티티는 OneToOne 어노테이션과 함께 @JoinColumn 어노테이션을 사용하여 관계의 "주체"임을 나타냅니다. 이렇게 함으로써 양방향 OneToOne 관계가 구성됩니다.

 

관계의 "주체"라는 말은, 양방향 관계에서 두 엔티티 중에서 외래키(FK)를 소유하고 있는 엔티티를 의미합니다. "주체" 엔티티는 관계를 유지하고 관리하는 쪽이며, 데이터베이스 테이블에서 외래키 컬럼이 있는 쪽입니다.

반대로, "반대쪽" 엔티티는 외래키를 소유하지 않고, "주체" 엔티티와의 관계를 통해서만 접근이 가능한 엔티티입니다. 이 경우에는 mappedBy 속성을 사용하여 "주체" 엔티티에 정의된 필드 이름을 참조합니다.

예를 들어, 앞서 든 User와 UserProfile 예제에서 UserProfile 엔티티가 "주체" 엔티티이며, User 엔티티가 "반대쪽" 엔티티입니다. UserProfile 엔티티는 외래키를 소유하고 있고(User 엔티티를 참조하는 user_id 컬럼), User 엔티티는 mappedBy를 사용하여 UserProfile 엔티티의 user 필드를 참조합니다.

'Spring' 카테고리의 다른 글

@Lob과 columnDefinition = "TEXT"  (0) 2023.04.26
List<OrderInfo> findAllByMember_MemberIdOrderByOrderDateDesc(Long memberId);  (0) 2023.04.26
단방향 조인 mappedBy= 없이  (0) 2023.04.26
CascadeType.DETACH  (0) 2023.04.26
CascadeType.REFRESH  (0) 2023.04.26