如何解决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 举报,一经查实,本站将立刻删除。