Why don't work?
[Error] mappedBy reference an unknown target entity property
오늘도 타는중
2022. 7. 20. 01:22
mappedBy reference an unknown target entity property 에러 발생
# JPA
# 엔티티
# 연관관계 매핑
# @OneToMany
# mappedBy
*issue 내용
- mappedBy reference an unknown target entity property 에러 발생
- 해당 에러는 mappedby로 지정해준 이름이, 참조할 외래키의 해당 필드명과 다를경우 발생하는 것으로 알고있다.
위 사진과 같이 필드명이 일치함에도 불구하고, 해당에러가 발생했다.
*Why don't work???
- @OneToMany의 속성인 mappedby로 지정해준 필드를 가진 타겟 엔티티를 찾지못해서 발생한 것 같다.
- 필드명을 일치 시켰음에도, 엔티티를 찾지 못하니 타겟 엔티티를 지정해줘야겠다고 생각했다.
*그럼.. 어떻게 해결하면 될까??
@OneToMany(mappedBy = "user", targetEntity = User_TeamBoard.class)
private List<User> wish_list = new ArrayList<>();
1. @OneToMany의 속성 targetEntity = User_TeamBoard.class 을 추가하여 타겟 엔티티를 명시해줬다.
2. 하지만, 이번에도 같은 에러가 발생...
3. 이유를 생각해본 결과, User_TeamBoard가 엔티티로 인식되지 못하고 있다는 생각이 들었다.
4. 검색해보니, @Entity가 선언된 클래스에 기본생성자가 없으면, JPA 관리자가 엔티티로 인식을 못하는 것을 발견
5. User_TeamBoard에 기본 생성자를 추가하니 모두 해결되었다.
*알게된 점
- mappedby로 지정 시, 필드명이 일치함에도 해당 에러가 발생할 경우, @OneToMany의 targetEntity 속성을 활용하면 된다.
- 이상한 점은, 이전에는 분명 타겟 엔티티를 지정해주지 않아도 연관관계 매핑이 정상적으로 이루어졌는데, 이번에는 왜 지정을 해줘야 오류가나는지 이유를 아직 찾지 못하였다.
- @Entity가 선언된 클래스에 기본생성자를 추가해야 JPA에서 엔티티로 인식한다.
*향후 과제
- mappedby 필드명 일치 시, 타겟 엔티티를 찾지 못하는 경우가 언제인지 정확하게 알아보기