我有两个实体,订单和产品,两者之间的关系是多对多的,我已经设置了关系,但是当我尝试向订单中添加多个产品时,我只得到第一个产品而不是整个对象列表. 即使我手动将它们添加到数据库中也会发生这种情况,输出与从邮递员或 talend api tester 发布它们的输出相同。您将在最后找到屏幕截图以了解更多关于我的问题的信息。
这是我的订单实体:
@Entity
@Table(name="Orders")
public class Orders implements Serializable {
@Id
@Column(name="idorder")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "orders_sequence")
@SequenceGenerator(name = "orders_sequence")
private Long idOrder;
@Column(name="idclient")
private Long idClient;
@Column(name="idmanager")
private String idManager;
@Column(name="iddeliveryman")
private String idDeliveryMan;
@Column(name="dateorders")
@JsonFormat(pattern="mm-dd-yyyy")
private Date dateOrder;
@Column(name="totalprice")
private double totalPrice;
@Column(name="status")
private String orderStatus;
@ManyToMany(cascade = { CascadeType.ALL } , fetch=FetchType.EAGER)
@JoinTable(
name = "orders_products",
joinColumns = { @JoinColumn(name = "idorder") },
inverseJoinColumns = { @JoinColumn(name = "idproduct") }
)
private Set<Products> products_orders = new HashSet<>() ;
@PrePersist
public void onCreate() {
this.dateOrder = new Date();
}
//getters and setters
}
我的产品实体:
@Entity
@Table(name="Products")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "idProduct")
public class Products implements Serializable{
@Id
@Column(name="idproduct")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "products_sequence")
@SequenceGenerator(name = "products_sequence")
private Long idProduct;
@Column(name="labelproduct")
private String label;
@Column(name="priceproduct")
private int priceProduct;
@Column(name="descriptionproduct")
private String descriptionProduct;
@ManyToMany(mappedBy = "products" )
private List<Menu> menus;
@ManyToMany(mappedBy = "products_orders" )
private Set<Orders> orders=new HashSet<>();
//getters and setters
}
我的订单控制器:
@RestController
@CrossOrigin
public class OrdersController {
@Autowired
private OrdersRepository ordersRepository;
@Autowired
private ClientsRepository clientsRepository;
@Autowired
private ProductsRepository productsRepos;
@PostMapping(path="orders/client/create/{idClient}")
public ResponseEntity<?> createOrderClient(@Valid @RequestBody Orders order, @PathVariable Long
idClient){
Set<Products> products=new HashSet<>();
double price =0;
Clients client=clientsRepository.findByPhone(idClient);
order.setIdClient(client.getPhone());
for (Products p: order.getProducts_orders()) {
Products product = productsRepos.findByIdProduct(p.getIdProduct());
price = price + product.getPriceProduct();
products.add(product);
System.out.println(product.getLabel() + product.getPriceProduct()+ product.getIdProduct());
}
order.setTotalPrice(price);
order.setOrderStatus("Pending");
order.setDateOrder(new Date());
order.setProducts_orders(products);
Orders newOrder = ordersRepository.save(order);
return new ResponseEntity<Orders>(newOrder,HttpStatus.CREATED);
}
以下是一些截图: