问题描述
我正在使用Hibernate和JPA创建购物车Spring Boot应用程序。我在CART和产品实体之间建立了OneToMany映射。 我的情况是,用户可以在购物车中多次添加相同的产品。如果多次添加同一产品,只需将数量增加1。能否请您告诉我如何实现这一点。我创建了以下实体。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "cart_id")
private int cartId;
double price;
int qty;
private long user_id;
@OneToMany(fetch = FetchType.EAGER)
private List<Product> products;
@OneToMany(mappedBy = "cart",fetch = FetchType.LAZY,cascade = CascadeType.ALL,orphanRemoval = true)
private List<Quantity> quantities;
public Cart() {
}
@实体 公共课数量{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private int productId;
private int quantity;
@ManyToOne(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
private Cart cart;
public Quantity() {
}
下面是将CART保存到数据库中的代码
@Override 公共列表addCartbyUserIdAndProductId(int productId,long userId,int qty,float price)引发异常{ 尝试{
// Getting existing cart by user id
List<Cart> cartList = addCartRepo.getCartByuserId(userId);
List<Product> prdList = new ArrayList<>();
if (cartList.isEmpty()) {
int i = 1;
Cart cart = new Cart();
cart.setUser_id(userId);
Product product = proServices.getProductsById(productId);
prdList.add(product);
List<Quantity> qList = new ArrayList<>();
Quantity quantity = new Quantity();
quantity.setProductId(product.getId());
quantity.setQuantity(1);
qList.add(quantity);
qRepo.save(quantity);
cart.setProducts(prdList);
cart.setQuantities(qList);
cart.setPrice(checkTotalAmountAgainstCart(product.getPrice(),userId));
addCartRepo.save(cart);
} else {
// Fetch cartId for the user id
List<Cart> cList = addCartRepo.getCartByuserId(userId);
for (Cart curCart : cList) {
if (curCart != null) {
Product product = proServices.getProductsById(productId);
// Calculate Product ID END
if (!curCart.getProducts().isEmpty()) {
List<Product> productList = curCart.getProducts();
for (Product curPrd : productList) {
if (productId == curPrd.getId()) {
System.out.println("matching product found -->>" + productId);
List<Quantity> qList = new ArrayList<>();
if (!curCart.getQuantities().isEmpty()) {
/*
* List<Quantity> curQuantityList = curCart.getQuantities();
*
* for(Quantity curQuantity : curQuantityList) {
*
* int preQuantity = curQuantity.getQuantity(); preQuantity = preQuantity + 1;
* Quantity quantity = new Quantity(); quantity.setProductId(curPrd.getId());
* quantity.setQuantity(preQuantity); qList.add(quantity);
*
* }
*/
}
curCart.setQuantities(qList);
curCart.setPrice(curCart.getPrice() + curPrd.getPrice());
addCartRepo.save(curCart);
} else {
curCart.getProducts().add(product);
System.out.println("curCart " + curCart.getPrice());
double finalPrice = curCart.getPrice() + product.getPrice();
curCart.setPrice(finalPrice);
addCartRepo.save(curCart);
}
}
}
// Calculate Product ID END
}
}
}
休眠创建具有以下列ID,PRODUCT_ID,QUANTITY,CART_CART_ID的数量表。当我使用上述代码存储“数量”时,列CART_CART_ID会插入空值。您能帮我解决这个问题吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)