Как обычно выполняются заказы, с помощью line_items.Заказы имеют несколько line_items.Каждый line_item должен иметь product_id из таблицы Product, количество и order_id из таблицы Order.
+------------+ +-----------------+ +---------------+
| Order | | Line_Item | | Product |
+------------+ +-----------------+ +---------------+
| id | | id | | id |
| date | | quantity | | name |
| paid | | price | | description |
+------------+ | product_id | +---------------+
| order_id |
+-----------------+
Таким образом, таблица Line_item имеет отношение «много к одному» с Product и множество.to-one с Заказом.
Когда пользователь добавляет товар в корзину, создается новый line_item.С этой настройкой продукты могут быть легко перемещены из заказа.Все элементы line_items тесно связаны с ордером, и каскад должен быть удален при удалении ордера.Заказ можно легко очистить, просто удалив все элементы line_items, связанные с этим заказом.
В коде это будет выглядеть так:
class Order {
@Id
long id;
Date date;
boolean paid;
@OneToMany
List<LineItem> lineItems;
}
class LineItem {
@Id
long id;
int quantity;
@ManyToOne
Order order;
@ManyToOne
Product product;
}
class Product {
@Id
long id;
String name;
String description;
BigDecimal price;
// Product does not need
// to know about line_items
}
Вот как я реализовал приложение для покупок перед
Существует понятие Корзина и Заказ.Эти два разных, но содержат в основном одну и ту же информацию.Это может показаться излишним, но я чувствовал, что это самый чистый способ представить реальность.Пользователь должен иметь только одну корзину, но может иметь несколько заказов.Когда пользователь выписывается, вся информация из корзины покупок переносится в новый Заказ и корзина очищается.
Сущности
Order Order_Item Product Shopping_Cart Cart_Item
----- ---------- ------- ------------- ---------
id id id id id
date quantity name user_id quantity
user_id product_id description product_id
order_id price cart_id
Вы можетевидим, что Order и Order_Item похожи на Shopping_Cart и Cart_Item.Когда пользователь начинает делать покупки, для него инициализируется корзина.Когда они добавляют товар в корзину, создаются элементы Cart_Items, связанные с Shopping_Cart.Когда пользователь выписывается, создается Заказ, и данные Shopping_Cart переносятся в Заказ, а все Cart_Items передаются в Order_Items, связанные с Заказом.Корзина Shopping_Cart очищается простым удалением всех элементов Cart_Items.