JPA/Hibernate aktualisiert die Datenbank nicht nach dem Aufrufen des LöschensJava

Java-Forum
Anonymous
 JPA/Hibernate aktualisiert die Datenbank nicht nach dem Aufrufen des Löschens

Post by Anonymous »

Ich versuche also, ein kurzes E-Commerce-Projekt mit Springboot und allem zu implementieren. Gemäß meinem Modell hat jeder Benutzer einen Wagen mit einer Liste von Elementen (Elemente (

Code: Select all

CartItems
in meinem Fall) und diese Elemente bestehen aus einem bestimmten Produkt .
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();
}
Alles funktioniert gut, bis ich versuche, ein Produkt aus dem Wagen zu löschen. Mit dem Endpunkt sollte ich passieren, dass sich der Gesamtpreis des CART ändern sollte, und der entsprechende Cartitem , der dieses Produkt in diesem speziellen Cart behauptete, sollte Löschen Sie löschen.@DeleteMapping("/carts/{cartId}/product/{productId}")
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!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post