스택큐힙리스트

JPA JoinColumn 대 mappedBy 본문

카테고리 없음

JPA JoinColumn 대 mappedBy

스택큐힙리스트 2023. 10. 26. 12:26
반응형

아래 코드와의 차이점은 무엇인가요?


@Entity
public class Company {
@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
@JoinColumn(name = companyIdRef, referencedColumnName = companyId)
private List<Branch> branches;
...
}

그리고,


@Entity
public class Company {
@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY,
mappedBy = companyIdRef)
private List<Branch> branches;
...
}

답변 1

주석 @JoinColumn은 이 엔티티가 관계의 원본임을 나타냅니다(즉: 대응하는 테이블에 참조된 테이블로의 외래 키가 있는 열이 있음). 반면에 속성 mappedBy는 이 쪽에 있는 엔티티가 관계의 역이라는 것을 나타내며, 원본은 다른 엔티티에 있다는 의미입니다. 이는 또한 mappedBy로 주석을 단 클래스에서 다른 테이블에 액세스할 수 있다는 것을 의미합니다(완전한 양방향 관계).


특히, 질문에 대한 올바른 주석은 다음과 같이 보일 것입니다:

@Entity
public class Company {
@OneToMany(mappedBy = company,
orphanRemoval = true,
fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
private List<Branch> branches;
}
@Entity
public class Branch {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = companyId)
private Company company;
}

@Entity
public class 회사 {
@OneToMany(mappedBy = 회사,
orphanRemoval = true,
fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
private List<지점> 지점들;
}
@Entity
public class 지점 {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = 회사ID)
private 회사 회사;
}

답변 2

JPA JoinColumn vs mappedBy: JPA의 JoinColumn과 mappedBy의 차이
JPA(Java Persistence API)는 Java 개발자들이 데이터베이스와 상호 작용하는 데 사용되는 기술입니다. JPA는 객체와 데이터베이스 간의 매핑을 쉽게 처리할 수 있도록 도와줍니다. 그러나 JPA를 처음 사용하는 개발자들에게는 JoinColumn과 mappedBy와 같은 용어들이 혼란을 줄 수 있습니다. 이번 글에서는 JPA의 JoinColumn과 mappedBy의 차이에 대해 자세히 알아보겠습니다.
먼저, JoinColumn은 JPA에서 양방향 연관 관계를 설정할 때 사용되는 어노테이션입니다. 양방향 연관 관계란 두 엔티티 (Entity) 간에 상호 작용이 가능하도록 하는 관계를 말합니다. JoinColumn은 두 엔티티 중 하나의 엔티티가 관계의 주체가 되어, 다른 엔티티의 키 값을 참조합니다. JoinColumn을 사용하면 연관관계의 소유자를 정의할 수 있으며, 해당 엔티티가 데이터베이스 테이블에 저장될 때 외부 키로 사용될 컬럼을 명시할 수 있습니다. 이러한 설정은 @JoinColumn 어노테이션을 사용하여 표현됩니다.
반면, mappedBy는 주로 양방향 연관 관계의 주인이 되지 않는 쪽에서 사용되는 어노테이션입니다. mappedBy를 사용하여 주인이 아닌 쪽의 엔티티가 양방향 연관 관계를 지정할 수 있습니다. mappedBy 속성은 주인 엔티티의 필드명을 가리키며, 해당 필드는 메핑된 엔티티의 연결을 표시합니다. mappedBy를 사용하면 매핑된 엔티티 클래스에서는 @JoinColumn 어노테이션을 사용하지 않아도 됩니다.
이 두 가지 JPA 어노테이션을 구분하는 방법은 다음과 같습니다. 만약, 연관 관계 중 하나의 엔티티가 외부 키를 갖고 있다면 JoinColumn을 사용해야 합니다. 그러나 연관 관계가 양방향이며, 주인이 되지 않는 엔티티의 경우에는 mappedBy를 사용해야 합니다.
실제 예시를 통해 JoinColumn과 mappedBy의 차이를 더 명확히 이해해봅시다. 예를 들어, 학생과 교실 사이에는 일대다의 양방향 연관 관계가 있을 수 있습니다. 이 경우, 학생 클래스가 주인이 되고 JoinColumn을 사용하여 외부 키를 지정해야 합니다. 반면에, 교실 클래스는 mappedBy를 사용하여 주인이 아닌 쪽에서 양방향 관계를 설정할 수 있습니다.
이로써, JPA의 JoinColumn과 mappedBy의 차이를 알아보았습니다. 우리는 JoinColumn을 사용하여 주인 엔티티가 연관 관계를 맺는 외부 키를 지정하고, mappedBy를 사용하여 주인이 아닌 엔티티에서 양방향 관계를 설정할 수 있음을 배웠습니다. JPA 사용 시 이러한 차이를 이해하면 데이터베이스와 객체 간의 효과적인 매핑을 구현할 수 있습니다.

반응형
Comments