[오류/해결] annotationexception unknown mappedby in

이신영·2023년 9월 6일
0

오류 모음집

목록 보기
18/25
post-thumbnail

쇼핑몰에 관련된 엔티티를 작성하고 관계설정하고 이제 테이블을 생성하도록 어플리케이션을 실행해보았는데?

AnnotationException: Unknown mappedBy in: Shop.entity.Inventory.product, referenced property unknown: Shop.entity.Product.inventory

라는 문구로 보아하니..

@Entity
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne(mappedBy = "inventory")
    @JoinColumn(name = "product_id")
    private Product product;

    private int quantity;

}
@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private double price;
    private String category;

    @OneToOne(mappedBy = "product")
    private Inventory inventory;

}

Inventory는 Product를 참조하지만 Product는 Inventory를 참조하지않는 단방향관계로 설정을 해두기위해서 Inventory엔티티에서만 JoinColumn을 적어넣었다.

다른부분은 문제가 있을만한곳은 없어보이는데.. 매핑문제인거같다


원인

Inventory 엔티티에서 mappedBy를 사용하면서 Product 엔티티의 필드를 지정했지만, Product 엔티티에는 inventory라는 필드의 매핑이 잘못 설정되어 있었다.


해결

@Entity
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    @JoinColumn(name = "product_id")
    private Product product;

    private int quantity;

}

Inventory 엔티티의 @OneToOne 부분의 속성을 제거해주니 원활하게 작동한다.

왜냐면 Inventory 엔티티가 Product을 관리하고자 할 때, Product 엔티티에서 @OneToOne(mappedBy = "product")를 사용하여 Inventory 엔티티가 관계의 주인이기때문에 mappedby를 쓸 수 없다! 두명 다 주인이 될 순 없죠?


후기

엔티티랑 dto를 차근차근하느라 관계가 생각보다 많이 어려웠다는걸 느끼는중 ㅎㅎ..

profile
후회하지 않는 사람이 되자 🔥

0개의 댓글