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로 변경하고 다시 실행을 해주었다
- 정상적으로 외래키 관계를 맺어주는 것을 확인 할 수 있다