Code: Select all
CartItems
Ich füge nur die relevanten Felder in diesen Klassen hinzu
CartItem.java
Code: Select all
@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>
Unten finden Sie die Service -Implementierung -< /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>
Die benutzerdefinierte Repository -Methode -< /p>
@Modifying
@Query("DELETE FROM CartItem ci WHERE ci.cart.id = ?1 AND ci.product.id = ?2")
void deleteCartItemByProductIdAndCartId(Long cartId, Long productId);
< /code>
Aus den 3 Codeblöcken aus, scheint nur der 3. das CART -Element aus der Datenbank zu löschen. Warum ist das so? Der Cartitem < /code>, den ich aus der Datenbank abgerufen habe. Bitte helfen Sie!