Не соблюдается уникальность в коллекции Set
Я пишу корзину интернет-магазина. Описание проблемы: я добавляю две сессии cart
и cart1
, соблюдается проверка на уникальность. Но, если я удалю сессию cart
и оставлю cart1
, то при добавлении нового элемента уникальность не будет соблюдена. Подскажите, пожалуйста, с чем это может быть связано
HttpSession session = request.getSession();
session.setMaxInactiveInterval(-1);
Set<Product> cart = new LinkedHashSet<>();
List<String> attribs = Arrays.asList("cart", "cart1"); // и т.д.
for (String attr : attribs) {
Product product = (Product) session.getAttribute(attr);
if (null == product) {
product = new Product(name, price, item_size, quantity, img, color);
}
if (cart.add(product)) { // товар успешно добавлен, нет дубликата
session.setAttribute(attr, product);
System.out.println("Товар " + product.getName() + " в корзине");
}
}
return "redirect:/basket";
Класс сущности БД Product
, в котором переопределены методы:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return name.equals(product.name) && item_size.equals(product.item_size);
}
@Override
public int hashCode() {
return Objects.hash(name, item_size);
}
@PostMapping("/cart/remove")
public String Cart_remove(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
session.removeAttribute("cart");
return "redirect:/basket";
}
Источник: Stack Overflow на русском