본문 바로가기

Spring

[JPA]mappedBy reference an unknown target entity property

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로 변경하고 다시 실행을 해주었다

  • 정상적으로 외래키 관계를 맺어주는 것을 확인 할 수 있다