spring - 如何在 Spring 中发送具有多对多关系的 POST 请求?
问题描述
我正在尝试添加带有设备列表的订单,这是我的实体:
订单实体
@Entity @Table(name = "orders") public class Order extends Ticket{
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private Set<OrderEquipment> orderEquipments = new HashSet<>();}
设备实体
@Entity @Table(name = "equipments") public class Equipment extends DateAudit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(max = 30)
private String name;
@NotNull
private Long nbr_piece ;
@OneToMany(mappedBy = "equipment", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<OrderEquipment> orderEquipments = new HashSet<>();}
和 order_equipment 实体
@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;}
这是 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);
}
解决方案
我在那里看到了一个错误,让我试着帮助你。由于您的问题不清楚,请让我知道它是否有效/无效:
你有两个双向映射:
- 订单(所有级联)<-> OrderEquipment
- 设备(所有级联)<-> OrderEquipment
您对它们都使用 @JoinColumn,即使它们是双向的。请看看这个。在定义双向关系时,您应该始终使用该mappedBy
属性。
现在,您从 POST 请求接收一个 Order 对象,对 3 个属性进行更改,然后保存它。由于 和 之间的映射Order
具有OrderEquipment
属性CascadeType.ALL
,因此对 Order 对象的任何保存都将保存所有与 OrderEquipment 关联的子项。如果您收到的 Order 对象已经有 OrderEquipment 子对象,您的方法也将保存/更新它们。
您的 POST 映射对我来说看起来不错,只需注意您的表关系定义。
查看此答案以检查应如何在 JSON POST 上格式化实体。
推荐阅读
- integration - Maxima 在微分积分上有问题吗?
- python - 如何将数据列从数据框转换为 json 格式?
- php - Laravel Livewire:通过单击按钮加载 livewire 组件
- php - PHP S3 - 如何获取特定文件的所有版本
- typescript - 如何使用变量获取对象中的参数值?
- javascript - 在网页上使用内联 Vanilla JavaScript 反复切换 Div 背景颜色
- reactjs - 反应:当我得到结果时如何停止 BarcodeScannerComponent
- php - 简单的php脚本,无法返回json
- haskell - wxHaskell 暂时无法使用吗?
- google-apps-script - 如何在任何 G 表格单元格中激活一个宏,该宏将在下一个单元格中复制和粘贴值?