Spring
[JPA]mappedBy reference an unknown target entity property
윤라프
2022. 3. 16. 06:46
mappedBy reference an unknown target entity property: jpabook.jpashop.domain.Order.member in jpabook.jpashop.domain.Member.orders
발생원인
- jpabook.jpashop.domain.Order.member in jpabook.jpashop.domain.Member.orders
- Order에서 member와 Member의 orders 조인 맵핑을 해주는 부분에 오류가 있다는 에러이다
- 자세히 보면 정말 바보같은 실수를 했다
- Order클래스에서 @ManyToOne 어노테이션을 붙여서
private Member memberId;라고 선언이 되어있다
- 반면에 Member클래스에서는
@OneToMany(mappedBy = "member")라고 선언을 했다
- mappedBy를 통해 연관관계를 member로 지어주고서는 실제 연관관계가 맺어질 Memeber의 필드명을 memberId라고 만들어 둬서 발생한 오류이다
mappedBy reference an unknown target entity property오류는 뒤에 나오는 클래스들의 맵핑관계의 명칭이 서로 맞지 않을 때 발생하는 것이다
정리할 내용
- DB에서는 FK를 통해 맺어주는 연관관계를 객체로 표현할 때는 연관관계 주인과 mappedBy로 나타내야 한다
- 다대일 관계에서 다가 되는 쪽으로 연관관계 주인을 하면 된다
- 연관관계의 주인이 될 부분에는 Join할 컬럼을 나타내줘야 한다
- 따라서, @ManyToOne 어노테이션을 통해 연관관계를 나타내주고 @JoinColumn(name = "MEMBER_ID")을 통해 어떤 컬럼(필드명)과 조인을 하는지 나타내주면 된다
- mappedBy는 연관관계를 맺으며 주인이 되는 객체의 필드명을 적어주면 된다
해결방법
- 연관관계 주인을 표시해주는 쪽에 필드명을 memberId로 놓고 mappedBy는 member로 표기해주며 발생한 오류이므로 한쪽에 맞춰주면 된다
- 그래서 나는 memberId를 member로 변경하고 다시 실행을 해주었다
- 정상적으로 외래키 관계를 맺어주는 것을 확인 할 수 있다