0

我有两个实体,订单和产品,两者之间的关系是多对多的,我已经设置了关系,但是当我尝试向订单中添加多个产品时,我只得到第一个产品而不是整个对象列表. 即使我手动将它们添加到数据库中也会发生这种情况,输出与从邮递员或 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);
    }

以下是一些截图:

获取订单列表时的我的日志 提交订单的输入

提交包含两个产品的订单的输出

4

0 回答 0