Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring应用程序中将产品链接到订单的最佳方式是什么?_Java_Spring_Hibernate_Rest_Entity Relationship - Fatal编程技术网

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

Java 在Spring应用程序中将产品链接到订单的最佳方式是什么?,java,spring,hibernate,rest,entity-relationship,Java,Spring,Hibernate,Rest,Entity Relationship,我正在开发一个简单的SpringBoot应用程序,提供REST服务,允许客户登录并订购一些产品 在我的MySQL数据库中,我有以下表格: 客户 卖方 商店 产品 命令 用户可以选择多个产品,将其添加到购物车,然后单击“继续结帐”。 在这部分之前,一切都很完美,但现在我不知道如何继续 我将只包括关系的一部分,以便让您更清楚地了解我的代码: 对于产品型号类别: @JoinColumn(name = "shop_id", nullable = false) @ManyToOne(fetch = Fet

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

在我的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;
对于车间模型类:

@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电话,创建一个订单,这些是我们可以考虑的解决方案,但我不确定它们是否正确:

第一个解决方案:

@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;
  • 我创建了一个名为“ordred_products”的新表
  • 当用户下订单时,我会发送一个POST请求来创建订单,然后我会发出一个POST请求来创建一个“ordered_products”元素,该元素将订购的产品作为一个集合,但我不知道如何映射它们
第二种解决方案:

@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;
  • 我只保留orders表,并向其中添加一组订购的产品
我很感激有人能向我解释正确的方法,因为我正在学习休息和实体之间的关系


非常感谢。

订单的一般执行方式与行项目有关。订单有多个行项目。每一行项目都应该有产品表中的产品id、数量和订单表中的订单id

  +------------+       +-----------------+        +---------------+
  |   Order    |       |    Line_Item    |        |    Product    |
  +------------+       +-----------------+        +---------------+
  | id         |       | id              |        | id            |
  | date       |       | quantity        |        | name          |
  | paid       |       | price           |        | description   |
  +------------+       | product_id      |        +---------------+
                       | order_id        |
                       +-----------------+
因此,Line_item表与产品和订单之间存在多对一关系

当用户将项目添加到购物车时,将创建一个新行项目。通过此设置,可以轻松地从订单导航到产品。所有行_项目都与订单紧密耦合,应在删除订单时级联删除。只需删除与订单关联的所有行项目,即可轻松清除订单

在代码中,它看起来像

类顺序{
@身份证
长id;
日期;
有偿的;
@独身癖
列出行项目;
}
类别行项目{
@身份证
长id;
整数;
@许多酮
订单;
@许多酮
产品;
}
类产品{
@身份证
长id;
字符串名;
字符串描述;
大十进制价格;
//产品不需要
//了解行项目
}

下面是我以前如何实现购物应用程序的 有购物车和订单的概念。这两者是不同的,但包含几乎相同的信息。这似乎是多余的,但我觉得这是代表现实的最干净的方式。一个用户应该只有一个购物车,但可以有多个订单。当用户签出时,来自购物车的所有信息都会转移到新订单中,并且购物车会被清除

实体

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
您可以看到订单和订单项类似于购物车和购物车项。当用户开始购物时,将为他们初始化购物车。当他们将产品添加到购物车时,会创建购物车项目,这些项目与购物车关联。当用户签出时,将创建订单,并将购物车数据传输到订单,所有购物车项目将传输到与订单关联的订单项目。然后,只需删除所有购物车项目即可清除购物车