Код: Выделить всё
CartItems
Я добавляю только соответствующие поля в этих классах
cartitem.java
Код: Выделить всё
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CartItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cart_item_id")
private Long id;
@ManyToOne
@JoinColumn(name = "cart_id")
private Cart cart;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
}
< /code>
cart.java
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cart_id")
private Long id;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
@OneToMany(mappedBy = "cart", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval = true)
private List cartItems = new ArrayList();
private Double totalPrice = 0.0;
}
< /code>
product.java
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Long id;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
@OneToMany(mappedBy = "product", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch = FetchType.EAGER)
private List products = new ArrayList();
}
public ResponseEntity deleteProductFromCart(@PathVariable Long cartId,
@PathVariable Long productId) {
String status = cartService.deleteProductFromCart(cartId, productId);
return new ResponseEntity(status, HttpStatus.OK);
}
< /code>
Ниже приведена реализация службы -< /p>
@Transactional
@Override
public String deleteProductFromCart(Long cartId, Long productId) {
Cart cart = cartRepository.findById(cartId)
.orElseThrow(() -> new ResourceNotFoundException("Cart", "id", cartId));
CartItem cartItem = cartItemRepository.findCartItemByProductIdAndCartId(cartId, productId);
if (cartItem == null) {
throw new ResourceNotFoundException("Product", "id", productId);
}
cart.setTotalPrice(cart.getTotalPrice() -
(cartItem.getPrice() * cartItem.getQuantity()));
// Code #1
// cart.getCartItems().remove(cartItem);
// cartRepository.save(cart);
// Code #2
// cartItemRepository.delete(cartItem);
// Code #3
// cartItemRepository.deleteCartItemByProductIdAndCartId(cartId, productId);
return "Product " + cartItem.getProduct().getName() + " removed from the cart !!!";
}
< /code>
Метод пользовательского хранилища -< /p>
@Modifying
@Query("DELETE FROM CartItem ci WHERE ci.cart.id = ?1 AND ci.product.id = ?2")
void deleteCartItemByProductIdAndCartId(Long cartId, Long productId);
< /code>
Из 3 блоков кода, только 3 -й, похоже, удаляет элемент тележки из базы данных. Почему это? Cartitem < /code>, который я извлекал из базы данных.
Я считаю, что мне не хватает фундаментальной вещи. Пожалуйста, помогите!
Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-delete