Я работаю над API электронной коммерции, у меня есть служба, которая отвечает за работу корзины:
@Service
@AllArgsConstructor
public class CartService implements ICartService {
private final CartRepository cartRepository;
private final CartItemRepository cartItemRepository;
private final CartMapper cartMapper;
...
@Transactional
@Override
public void clearCart(Long id) {
// Delete all cart items first
cartItemRepository.deleteByCartId(id);
Optional cart = cartRepository.findById(id);
if (cart.isPresent()) {
cartRepository.deleteById(id);
} else {
throw new ResourceNotFoundException("Cart not found for ID: " + id);
}
}
...
}
cartItemRepository.deleteByCartId(id); работает отлично, удаляет все элементы корзины из базы данных, но часть, отвечающая за удаление самой корзины, не работает, данные корзины все еще находятся в базе данных, но когда я добавляю в корзину новый товар после удаления, предыдущие данные удаляются, а новые данные заменяют старые!
Вот как выглядит моя корзина:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Cart {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long id;
private BigDecimal totalAmount = BigDecimal.ZERO;
@OneToMany(
mappedBy = "cart",
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JsonManagedReference
private Set items = new HashSet();
@OneToOne
@JoinColumn(name = "user_id")
private User user;
public void addItem(CartItem item) {
this.items.add(item);
item.setCart(this);
updateTotalAmount();
}
public void removeItem(CartItem item) {
this.items.remove(item);
item.setCart(null);
updateTotalAmount();
}
private void updateTotalAmount() {
this.totalAmount = items.stream().map(item -> {
BigDecimal unitPrice = item.getUnitPrice();
if (unitPrice == null) {
return BigDecimal.ZERO;
}
return unitPrice.multiply(BigDecimal.valueOf(item.getQuantity()));
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
Я думал, проблема во взаимосвязи с сущностью пользователя, вот сущность пользователя:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class User {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
@OneToOne(mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true)
private Cart cart;
@OneToMany(
mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JsonManagedReference
private List orders;
}
Я добавил каскадное отсоединение к свойству пользователя в объекте корзины:
@OneToOne(
cascade = CascadeType.DETACH
)
@JoinColumn(name = "user_id")
private User user;
и тоже не сработало, я также пытался принудительно удалить из базы данных, но тоже не получилось:
cartItemRepository.deleteByCartId(id);
entityManager.remove(cart.get()); // Forces deletion from DB
Подробнее здесь: https://stackoverflow.com/questions/795 ... -but-the-c
При удалении корзины по идентификатору все элементы корзины корректируются правильно, но корзина по-прежнему сохраняет с ⇐ JAVA
Программисты JAVA общаются здесь
1762070239
Anonymous
Я работаю над API электронной коммерции, у меня есть служба, которая отвечает за работу корзины:
@Service
@AllArgsConstructor
public class CartService implements ICartService {
private final CartRepository cartRepository;
private final CartItemRepository cartItemRepository;
private final CartMapper cartMapper;
...
@Transactional
@Override
public void clearCart(Long id) {
// Delete all cart items first
cartItemRepository.deleteByCartId(id);
Optional cart = cartRepository.findById(id);
if (cart.isPresent()) {
cartRepository.deleteById(id);
} else {
throw new ResourceNotFoundException("Cart not found for ID: " + id);
}
}
...
}
cartItemRepository.deleteByCartId(id); работает отлично, удаляет все элементы корзины из базы данных, но часть, отвечающая за удаление самой корзины, не работает, данные корзины все еще находятся в базе данных, но когда я добавляю в корзину новый товар после удаления, предыдущие данные удаляются, а новые данные заменяют старые!
Вот как выглядит моя корзина:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Cart {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long id;
private BigDecimal totalAmount = BigDecimal.ZERO;
@OneToMany(
mappedBy = "cart",
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JsonManagedReference
private Set items = new HashSet();
@OneToOne
@JoinColumn(name = "user_id")
private User user;
public void addItem(CartItem item) {
this.items.add(item);
item.setCart(this);
updateTotalAmount();
}
public void removeItem(CartItem item) {
this.items.remove(item);
item.setCart(null);
updateTotalAmount();
}
private void updateTotalAmount() {
this.totalAmount = items.stream().map(item -> {
BigDecimal unitPrice = item.getUnitPrice();
if (unitPrice == null) {
return BigDecimal.ZERO;
}
return unitPrice.multiply(BigDecimal.valueOf(item.getQuantity()));
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
Я думал, проблема во взаимосвязи с сущностью пользователя, вот сущность пользователя:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class User {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
@OneToOne(mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true)
private Cart cart;
@OneToMany(
mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JsonManagedReference
private List orders;
}
Я добавил каскадное отсоединение к свойству пользователя в объекте корзины:
@OneToOne(
cascade = CascadeType.DETACH
)
@JoinColumn(name = "user_id")
private User user;
и тоже не сработало, я также пытался принудительно удалить из базы данных, но тоже не получилось:
cartItemRepository.deleteByCartId(id);
entityManager.remove(cart.get()); // Forces deletion from DB
Подробнее здесь: [url]https://stackoverflow.com/questions/79554626/when-deleting-the-cart-by-id-all-the-cartitems-get-rovmved-correctly-but-the-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия