쇼핑몰에 관련된 엔티티를 작성하고 관계설정하고 이제 테이블을 생성하도록 어플리케이션을 실행해보았는데?
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를 차근차근하느라 관계가 생각보다 많이 어려웠다는걸 느끼는중 ㅎㅎ..