如何在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);
}
我在那里看到了一个错误,让我试着帮助你。由于您的问题不清楚,请让我知道它是否有效: 这里有两个双向映射:
- 订购(所有级联)订购设备
- 设备(包括所有级联)订购设备
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);
}