@Entity @Table(name = "baskets") public class Basket { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @ElementCollection @CollectionTable(name = "basket_products") @MapKeyJoinColumn(name="product_id") @MapKeyColumn(name = "product_id") @Column(name = "amount") private Map<Product, Double> products; @NotNull @ManyToOne @JoinColumn(name="username") private User user; @NotNull private LocalDateTime date; public Basket() { this.date=LocalDateTime.now(); this.products = new HashMap<Product, Double>(); System.out.println("ID"+this.id); } public long getId() { return id; } public Map<Product, Double> getProducts() { return products; } public void setProducts(Map<Product, Double> products) { this.products = products; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public LocalDateTime getDate() { return date; } public void setDate(LocalDateTime date) { this.date = date; } public boolean containsProduct(long id) { for (Map.Entry<Product,Double> entry : this.getProducts().entrySet()) { if (entry.getKey().getId()==id) return true; } return false; } public boolean contains(String name) { for (Map.Entry<Product,Double> entry : this.getProducts().entrySet()) { if (entry.getKey().getName().equals(name)) return true; } return false; } public Product findByName(String name) { for (Map.Entry<Product,Double> entry : this.getProducts().entrySet()) { if (entry.getKey().getName().equals(name)) { return entry.getKey(); } } return null; } public void removeProduct(String name) { this.products.remove(this.findByName(name)); } @Override public String toString() { StringBuilder prod = new StringBuilder(); for (Map.Entry<Product, Double> entry : this.products.entrySet()) { prod.append(entry.getKey()).append(" ").append(entry.getValue()); } return prod.toString(); } }
Когда она создается оператором new, она уже имеет id = 0.
Это правильное поведение? После вызова функций save или persist, ее id так и не меняется.