Hibernate / JPA在Spring Boot上的购物车应用程序

问题描述

我正在使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...