Один товар указывает на один товар.Но на один товар ссылаются несколько товаров в корзине.Таким образом, это ассоциация «один ко многим».
Одна корзина покупок в виде нескольких товаров, и элемент является частью одной корзины, поэтому это также ассоциация «один ко многим».
Если у вас есть двунаправленная ассоциация OneToMany, то ее владельцем всегда является сторона many .Сторона владельца ассоциации - это сторона, где нет атрибута mappedBy
.Действительно, mappedBy
означает « Я просто другая сторона ассоциации, которая уже сопоставлена следующим атрибутом ».Обратите внимание, что способ сопоставления асоциации (столбец соединения, таблица соединения) должен быть определен только на стороне владельца, где отсутствует атрибут mappedBy
.
При наличии однонаправленной ассоциации существует только однаместо, где сопоставление может быть определено, и атрибут mappedBy, таким образом, никогда не используется.
Итак, ваши сущности должны отображаться так:
@Entity
class Product{
private Long id;
private String name;
...
}
@Entity
class CartItem{
private Long id;
@ManyToOne
private Product product;
private int quantity;
...
}
@Entity
class ShoppingCart{
private Long id;
@OneToMany
private Set<CartItem> cartItems;
...
}
Если вы хотите, чтобы ваш элемент корзины знало своей корзине покупок ваша ассоциация становится двунаправленной, а субъекты становятся:
@Entity
class CartItem{
private Long id;
@ManyToOne
private Product product;
@ManyToOne
private ShppingCart shoppingCart;
private int quantity;
...
}
@Entity
class ShoppingCart{
private Long id;
@OneToMany(mappedBy = "shoppingCart")
private Set<CartItem> cartItems;
...
}