假设我有一个名为CartItem
@Entity
@Table(name = "cart_item")
public class CartItem {
private int id;
private Integer quantity;
private Product product;
private List<CartItemProductAttribute> cartItemProductAttributes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "cartItem", cascade=CascadeType.ALL)
public List<CartItemProductAttribute> getCartItemProductAttributes() {
return cartItemProductAttributes;
}
/*More getter - setters*/
其他相关课程为CartItemProductAttribute
@Entity
@Table(name = "cart_item_productattributes")
public class CartItemProductAttribute implements Serializable {
private int id;
private String value;
private CartItem cartItem;
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "CartItemId")
public CartItem getCartItem() {
return cartItem;
}
我想要做的是:假设,我在购物车中添加了一个新商品,并且某些 X 属性与该商品相关联。所有信息都存储在CartItem
对象中,其中List
CartItemProductAttribute
包含与此特定购物车项目关联的属性的详细信息。
两个表都有这样的关系:
cart_item
Id - PK NN
ProductId - NN
Quantity - NN
cart_item_product_attributes
Id - PK NN
Value - NN
CartItemId - NN FK
这样,cart_item_product_attributes
将 FK 保留为cart_item
。但CartItem
内的CartItemProductAttributes
对象包含null
。因为此CartItem
对象的插入失败并出现以下错误。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'CartItemId' cannot be null
有没有办法,cart_item
记录首先插入到db中,它应该为id
提供新创建的cart_item
记录的引用或至少CartItemProductAttribute
,以便,它也可以插入属性。
标题可能会产生误导,因为我无法找到这个问题的完美标题。如果有人可以提出更好的标题,请编辑