Java hibernate включается и обновляется одновременно - PullRequest
1 голос
/ 21 февраля 2020

CartItemView

@PostMapping("/addToCart")
    public String addToCart(@ModelAttribute Product product,@Valid CartItem cartItem,@ModelAttribute User user){
        Cart cart = cartServices.findCartByUser(user);
        List<CartItem> cartItems = cartItemServices.findAllCartItems(cart);
        if (cartItems.size()==0) {
            cartItemServices.save(user, cartItem, product.getName());
        }
        for(int i=0;i<cartItems.size();i++) {
            CartItem cc = cartItems.get(i);
            if (product.getName().equals(cc.getProduct().getName())) {
                cartItemServices.update(user, cc, product.getName());
            }else {
                cartItemServices.save(user, cartItem, product.getName());
            }
        }

        return "redirect:/";
    }

CartItemService

public void save(User user,CartItem cartItem,String name){   //save new
    Cart cart = cartRepository.findCartByUser(user);
    Product product = productRepository.findByName(name);
    cartItem.setProduct(product);
    cartItem.setCart(cart);
    cartItem.setQuantity(1);
    cartItem.setPrice(product.getPrice());
    cartItemRepository.save(cartItem);
}
public CartItem update(User user,CartItem cartItem,String name){ //update
    Cart cart = cartRepository.findCartByUser(user);
    Product product = productRepository.findByName(name);
    cartItem.setProduct(product);
    cartItem.setCart(cart);
    cartItem.setQuantity(cartItem.getQuantity()+1);
    cartItem.setPrice(product.getPrice()*cartItem.getQuantity());
    return cartItemRepository.save(cartItem);
}

Проблема в том, что если оператор с else внутри для l oop .. Оба они всегда выполняются .. Так что, если я добавлю новый элемент и другой новый элемент, затем пытается добавить первый элемент, который я добавил в корзину, он создает новый элемент внутри корзины, но также делает количество первого элемента + 1

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Я решил это так

Boolean aa;
List<CartItem> cartItems = cartItemServices.findAllCartItems(cart);
for(CartItem cartItem1 : cartItems){
    if(cartItem1.getProduct().getName().equals(product.getName())){
        cartItemServices.update(user, cartItem1, product.getName());
        check=true;
        break;
    }
}
if(check==false){
    cartItemServices.save(user, cartItem, product.getName());
}
0 голосов
/ 21 февраля 2020

Мне кажется, проблема в том, что вы делаете oop для сравнения названий ваших продуктов.

Если у меня есть продукт A и продукт B в моей корзине, и я хочу добавить продукт A снова, один раз в l oop, я буду сравнивать продукт A с продуктом A, он такой же, так что добавит один товар А товар. Затем он будет сравнивать продукт B с продуктом A (поскольку ваш l oop не сделан), он будет другим, поэтому он добавит новый элемент Product A, даже если он уже был обновлен.

Для каждого элемента с другим названием продукта у вас будет новый элемент вашего исходного продукта.

Вы можете найти способ узнать, есть ли товар в вашей корзине, вместо того, чтобы проходить через все oop.

cartItems.stream().anyMatch(item -> item.getProduct().getName().equals(product.getName()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...