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로 변경하고 다시 실행을 해주었다
- 정상적으로 외래키 관계를 맺어주는 것을 확인 할 수 있다
'Spring' 카테고리의 다른 글
Distpatcher Servlet(디스패처 서블릿) 개념과 동작과정 (0) | 2022.09.11 |
---|---|
@RequiredArgConstructor과 @AllArgConstructor의 차이점 (0) | 2022.06.18 |
com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization. (0) | 2022.03.13 |
Required request parameter 'linkId' for method parameter type String is not present (0) | 2022.03.10 |
No identifier specified for entity 에러 해결 방법 (0) | 2022.03.09 |