package models; import java.io.Serializable; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name="shopping_carts_products") public class ShoppingCartProduct { private ShoppingCartProductPK primaryKey; private int quantity; private ShoppingCart shoppingCart; private Product product; public ShoppingCartProduct() { // must be defined to avoid Hibernate's exceptions // Caused by: org.hibernate.InstantiationException: No default constructor for entity: models.ShoppingCartProduct } public ShoppingCartProduct(ShoppingCart shoppingCart, Product product, int quantity) { this.shoppingCart = shoppingCart; this.product = product; this.quantity = quantity; // this.primaryKey = new ShoppingCartProductPK(shoppingCart.getId(), product.getId()); } @EmbeddedId @AttributeOverrides({ @AttributeOverride(name = "shoppingCartId", column = @Column(name = "shopping_carts_id", nullable = false)), @AttributeOverride(name = "productId", column = @Column(name = "products_id", nullable = false)) }) public ShoppingCartProductPK getPrimaryKey() { if (this.primaryKey == null) { this.primaryKey = new ShoppingCartProductPK(shoppingCart.getId(), product.getId()); } return this.primaryKey; } @Column(name="quantity") public int getQuantity() { return this.quantity; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "shopping_carts_id", nullable = false, insertable = false, updatable = false) public ShoppingCart getShoppingCart() { return shoppingCart; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "products_id", nullable = false, insertable = false, updatable = false) public Product getProduct() { return product; } public void setPrimaryKey(ShoppingCartProductPK primaryKey) { this.primaryKey = primaryKey; } public void setQuantity(int quantity) { this.quantity = quantity; } public void setShoppingCart(ShoppingCart shoppingCart) { this.shoppingCart = shoppingCart; } public void setProduct(Product product) { this.product = product; } public static class ShoppingCartProductPK implements Serializable { private static final long serialVersionUID = 3251001402577279411L; private int shoppingCartId; private int productId; public ShoppingCartProductPK() { } public ShoppingCartProductPK(int shoppingCartId, int productId) { this.shoppingCartId = shoppingCartId; this.productId = productId; } public int getShoppingCartId() { return this.shoppingCartId; } public int getProductId() { return this.productId; } public void setShoppingCartId(int shoppingCartId) { this.shoppingCartId = shoppingCartId; } public void setProductId(int productId) { this.productId = productId; } @Override public String toString() { return "ShoppingCartProductPK {product's id: "+this.productId+", shopping cart's id:"+this.shoppingCartId+"}"; } } @Override public String toString() { return "ShoppingCartProduct {primary key: "+this.primaryKey+", quantity: "+this.quantity+"}"; } }