gpt4 book ai didi

java - 在 Spring 应用程序中将产品链接到订单的最佳方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:50 25 4
gpt4 key购买 nike

我正在开发一个提供 REST 服务的简单 Spring Boot 应用程序,以允许客户登录并订购一些产品。

在我的 MySQL 数据库中,我有以下表格:

客户端卖方店铺产品订单

用户可以选择多个产品,将它们添加到购物车,然后单击“继续结帐”。在这部分之前,一切都很完美,但现在我不确定如何进行。

我将只包含关系部分,让您更清楚地了解我的代码:

对于产品模型类:

@JoinColumn(name = "shop_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Shop shop;

@JoinColumn(name = "order_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Order order;

对于订单模型类:

@JoinColumn(name = "user_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private User user;

@JoinColumn(name = "shop_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Shop shop;

对于商店模型类:

@JoinColumn(name = "user_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private User user;

现在我需要进行 REST POST 调用,以创建订单,这些是可以考虑的解决方案,但我不确定它们是否正确:

第一种解决方案:

  • 我创建了一个名为“ordred_products”的新表
  • 当用户下订单时,我发送一个 POST 请求来创建订单,然后我发出一个 POST 请求来创建一个“ordered_products”元素,它将订购的产品作为一个集合,但我不知道如何映射它们。

第二种方案:

  • 我只保留顺序表并向其中添加一组订购产品。

如果有人能向我解释正确的方法,我将不胜感激,因为我只是在学习 REST 和实体之间的关系。

非常感谢。

最佳答案

订单的一般执行方式与 line_items 有关。订单有多个 line_items。每个 line_item 都应具有 Product 表中的 product_id、数量和 Order 表中的 order_id。

  +------------+       +-----------------+        +---------------+
| Order | | Line_Item | | Product |
+------------+ +-----------------+ +---------------+
| id | | id | | id |
| date | | quantity | | name |
| paid | | price | | description |
+------------+ | product_id | +---------------+
| order_id |
+-----------------+

因此 Line_item 表与 Product 具有多对一关系,与 Order 具有多对一关系。

当用户将商品添加到购物车时,会创建一个新的 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。当用户开始购物时,会为他们初始化一个购物车。当他们将产品添加到购物车时,将创建与 Shopping_Cart 关联的 Cart_Items。当用户结帐时,会创建一个Order,并将Shopping_Cart数据传输到Order,所有Cart_Items都传输到与Order关联的Order_Items。然后通过简单地删除所有 Cart_Items 来清除 Shopping_Cart。

关于java - 在 Spring 应用程序中将产品链接到订单的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52030500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com