[ JPA ] Use of @OneToMany or @ManyToMany targeting an unmapped class

Minseo Kang·2023년 8월 3일

오류해결

목록 보기
1/1

하고 싶었던 것

  • SUMMARY 라는 엔티티와 USER라는 엔티티를 다대일 양방향으로 설정하여 SUMMARY에서도 USER를 알고, USER에서도 SUMMARY를 알게 하고싶었다.



작성한 코드

  • Summary.user를 주인이라고 가정한 상황이다.
@Entity
@Table(name = "SUMMARY")
public class Summary {

	// 여러 필드들 ..
	@ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    // 생성자, getter/setter ..
    
@Entity
@Table(name = "USER")
public class User {

	// 여러 필드들 ..
    @OneToMany(mappedBy = "user")
    private List<Summary> summaryList = new ArrayList<>();
    
    // 생성자, getter/setter ..
    
}



에러 로그

  • 에러 로그는 다음과 같았다.
    Use of @OneToMany or @ManyToMany targeting an unmapped class: com.server.sumnote.user.entity.User.summaryList[com.server.sumnote.summary.entity.Summary]




해결방법

  • 코드상으로도 문제가 없어보였고, GPT에게 물어봐도 명확한 답을 받지 못해 계속 삽질을 했다. 알고보니 엔티티 등록을 안해준 것..

프로젝트의 resources/META-INF/persistence.xml 파일에 다음과 같이 작성해주었다.

<persistence-unit name="sum-note"> <!-- 기존에 내가 작성 -->
        <class>com.server.sumnote.user.entity.User</class> <!-- 기존에 내가 작성 -->
        <class>com.server.sumnote.summary.entity.Summary</class> <!-- 새로 작성 -->

  • 오류 없이 잘 실행된다.

  • 만들어진 테이블은 다음과 같다.


(주의할 점은, FK로 갖는 엔티티는 SUMMARY라는 것이다. 양방향으로 설정을 했지만 여기서 양방향의 의미는 테이블이 아닌 각 객체에서 서로를 참조할 수 있다는 것이다. 양방향이라서 USER 테이블에도 SUMMARY 관련된 필드가 있어야 하는가? 라고 생각하면 안된다는 것이다.)


엔티티에 해당하는 클래스를 만들면 꼭 persistence.xml에 등록하도록 하자.

0개의 댓글