我正在尝试添加带有设备清单的订单,这是我的实体:
订单实体
@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中的添加功能
@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);
}
答案 0 :(得分:0)
我在那儿看到了一个错误,莱姆试图帮助您。由于您的问题不清楚,因此请让我知道是否有效:
您在那里有两个双向映射:
尽管它们都是双向的,但是您都在使用@JoinColumn。请查看this。定义双向关系时,应始终使用mappedBy
属性。
现在,您正在从POST请求接收一个Order对象,对3个属性进行更改,然后保存。由于Order
和OrderEquipment
之间的映射具有CascadeType.ALL
属性,因此对Order对象的任何保存都将保存所有关联的OrderEquipment子级。如果您收到的Order对象已经具有OrderEquipment子级,则您的方法还将保存/更新它们。
您的POST映射对我来说看起来不错,只需注意您的表关系定义。
看看这个answer来检查应如何在JSON POST上格式化少量实体。