Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
如何在Spring中使用多对多关系发送POST请求?_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

如何在Spring中使用多对多关系发送POST请求?

如何在Spring中使用多对多关系发送POST请求?,spring,spring-boot,spring-data-jpa,Spring,Spring Boot,Spring Data Jpa,我正在尝试添加带有设备列表的订单,以下是我的实体: 订单实体 @Entity @Table(name = "orders") public class Order extends Ticket{ @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private Set<OrderEquipment> orderEquipments = new HashSet<>();} 下面是orderControll

我正在尝试添加带有设备列表的订单,以下是我的实体:

订单实体

 @Entity @Table(name = "orders") public class Order extends Ticket{
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private Set<OrderEquipment> orderEquipments = new HashSet<>();}
下面是orderController中的add函数

 @PostMapping("/orders")
public Order createOrder(@Valid @RequestBody Order Order){
 Order.setObservateurEmail(Order.getObservateurEmail());
 Order.setObject(Order.getObject());
 Order.setDescription(Order.getDescription());      
 return orderRepository.save(Order);          
} 

我在那里看到了一个错误,让我试着帮助你。由于您的问题不清楚,请让我知道它是否有效:

这里有两个双向映射:

  • 订购(所有级联)订购设备
  • 设备(包括所有级联)订购设备
您对这两种类型都使用@JoinColumn,即使它们是双向的。请看一看。定义双向关系时,应始终使用
mappedBy
属性

现在,您从POST请求接收到一个Order对象,对3个属性进行更改,然后保存它。由于
Order
OrderEquipment
之间的映射具有
CascadeType.ALL
属性,因此对Order对象的任何保存都将保存所有关联的OrderEquipment子级。如果您正在接收的订单对象已经有OrderEquipment子对象,则您的方法还将保存/更新它们

您的POST映射在我看来很好,请注意表关系定义


看看这个,检查如何在JSON帖子上格式化实体的lits。

请分享预期的输出以及您面临的错误。谢谢,我修复了映射,但在邮递员的帖子请求中,我不知道如何添加orderEquipment{“observateurEmail”:test@gmail.com,“对象”:“顺序”,“说明”:“描述”,…}为了保存它。我已经编辑了答案。请检查我添加的额外链接,查看JSON帖子上实体列表的格式。这并不是真正回答我的问题,我需要发送orderEquipment列表,其中包含一个设备、一个数量和一个在同一时刻已经创建的订单。等等……orderEquipment对象ct是两个父亲的儿子…你一次只能通过JSON POST为它分配一个父亲。如果你想建立映射到那里的所有关系,你应该发布一个JSON,其中一个订单映射到OrderEquipment列表,另一个POST,设备映射到OrderEquipment列表。谢谢你,我终于尝试先保存订单,然后e Order设备对象,这很好。。。
@Entity @Table(name = "order_equipment") public class OrderEquipment extends DateAudit { @Id
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;

@Id
@ManyToOne
@JoinColumn(name = "equipment_id")
private Equipment equipment;

@NotBlank
@Column(name = "quantity")
private Long quantity;}
 @PostMapping("/orders")
public Order createOrder(@Valid @RequestBody Order Order){
 Order.setObservateurEmail(Order.getObservateurEmail());
 Order.setObject(Order.getObject());
 Order.setDescription(Order.getDescription());      
 return orderRepository.save(Order);          
}