작성
·
100
0
@OneToMany
@JoinColumn(name="member")
private List<Order> orders = new ArrayList<>();
@ManyToOne
@JoinColumn(name="member_id") //맵핑할 컬럼
private Member member;
Member 의 joinColumn 은 member 객체 자체이고
Order의 joinColumn은 db의 컬럼 명인데
member 의 joinColumn 을 member_id, 즉 db의 컬럼명으로 또는 그냥 id 라고 하면 안되나요? 안된다면 이유도 알려주시면 감사하겠습니다!!
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
@JoinColumn
을 사용하는 경우, name
속성은 실제 데이터베이스 컬럼 이름을 지정하는 용도로 사용됩니다. @ManyToOne
이나 @OneToMany
와 같은 관계 매핑에서 @JoinColumn
의 name
속성을 사용하여 외래 키(foreign key)의 이름을 지정합니다.
Member
클래스에서 @OneToMany
관계를 맺고 있는 orders
필드에 @JoinColumn(name="member")
라고 지정하셨는데, 이는 Order
테이블에 member
라는 컬럼이 외래 키로 사용됨을 의미합니다. 하지만, 일반적으로 @OneToMany
관계에서는 @JoinColumn
을 사용하지 않는 것이 좋습니다. 왜냐하면 @OneToMany
관계에서 @JoinColumn
을 직접 사용하면, 관리해야 하는 외래 키가 여러 개가 될 수 있기 때문입니다. 대신 @OneToMany
관계는 mappedBy
속성을 사용하여 양방향 관계의 소유측이 어디인지를 명시하는 것이 일반적입니다.
Order
클래스에서는 @ManyToOne
관계를 맺기 위해 @JoinColumn(name="member_id")
를 사용하여, Member
와 Order
를 연결하는 외래 키 컬럼으로 member_id
를 명시적으로 지정하고 있습니다. 이 경우는 올바른 사용 방법입니다.
따라서, Member
클래스에서 @JoinColumn
을 사용하는 대신 @OneToMany(mappedBy="member")
같은 형태로 Order
클래스에서 Member
를 참조하는 필드 이름을 mappedBy
속성으로 지정해 주어야 합니다. 이렇게 하면 Order
테이블의 member_id
컬럼을 통해 Member
와 Order
가 연결되며, JPA가 관계를 올바르게 관리할 수 있게 됩니다.
@OneToMany(mappedBy="member")
private List<Order> orders = new ArrayList<>();
본문에서 언급하신 @JoinColumn(name="member_id")
를 Member
클래스에 직접 사용하는 것은 데이터베이스 설계와 JPA 매핑 전략에 따라 다를 수 있으나, 일반적인 사용 패턴은 위에서 설명한 대로 @OneToMany
관계에서는 mappedBy
속성을 사용하는 것입니다.