Cart と Plan の間には 1 対多の関係があります。カートを永続化するときに、カート内のすべての計画を永続化したいと考えています。Spring JPA リポジトリを使用しています。一方向と双方向の両方の関連付けを試しましたが、いずれの場合も次のエラーで失敗します。
org.springframework.dao.DataIntegrityViolationException: ORA-01400: NULL を ("SS"."SS_CART_PLANS"."CART_ID") に挿入できません。SQL [該当なし]; 制約 [null]; ネストされた例外は org.hibernate.exception.ConstraintViolationException: ORA-01400: cannot insert NULL into ("SS"."SS_CART_PLANS"."CART_ID") です
マッピングは次のとおりです。
@Entity
@Table(name = "SS_CART")
public class Cart implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="SS_CART_PLANS_ID_GENERATOR", sequenceName="SS_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SS_CART_PLANS_ID_GENERATOR")
private long id;
@OneToMany(cascade=CascadeType.ALL,mappedBy="cart")
private Set<CartPlan> cartPlans;
// uni-directional many-to-one association to SsUser
@ManyToOne(cascade= {CascadeType.ALL })
@JoinColumn(name = "USER_ID")
private User user;
public Cart() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public Set<CartPlan> getCartPlans() {
return this.cartPlans;
}
public void setCartPlans(Set<CartPlan> cartPlans) {
this.cartPlans = cartPlans;
}
/**
* @return the user
*/
public User getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(User user) {
this.user = user;
}
}
@Entity
@Table(name="SS_CART_PLANS")
public class CartPlan implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="SS_CART_PLANS_ID_GENERATOR", sequenceName="SS_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SS_CART_PLANS_ID_GENERATOR")
private long id;
@Temporal(TemporalType.DATE)
@Column(name="EFFECTIVE_DATE")
private Date effectiveDate;
@Column(name="ISSUER_CODE")
private String issuerCode;
@Column(name="PLAN_CODE")
private String planCode;
//bi-directional many-to-one association to SsCartPlan
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="PARENT_PLAN_ID")
private Set<CartPlan> cartPlans;
@ManyToOne
@JoinColumn(name="CART_ID")
@ForeignKey(name="SS_CART_PLANS_CART_FK")
private Cart cart;
//bi-directional one-to-one association to SsSearchCriteria
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="CRITERIA_ID")
private SearchCriteria searchCriteria;
public CartPlan() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public Date getEffectiveDate() {
return this.effectiveDate;
}
public void setEffectiveDate(Date effectiveDate) {
this.effectiveDate = effectiveDate;
}
public String getIssuerCode() {
return this.issuerCode;
}
public void setIssuerCode(String issuerCode) {
this.issuerCode = issuerCode;
}
public String getPlanCode() {
return this.planCode;
}
public void setPlanCode(String planCode) {
this.planCode = planCode;
}
/**
* @return the cartPlans
*/
public Set<CartPlan> getCartPlans() {
return cartPlans;
}
/**
* @param cartPlans the cartPlans to set
*/
public void setCartPlans(Set<CartPlan> cartPlans) {
this.cartPlans = cartPlans;
}
/**
* @return the searchCriteria
*/
public SearchCriteria getSearchCriteria() {
return searchCriteria;
}
/**
* @param searchCriteria the searchCriteria to set
*/
public void setSearchCriteria(SearchCriteria searchCriteria) {
this.searchCriteria = searchCriteria;
}
/**
* @return the cart
*/
public Cart getCart() {
return cart;
}
/**
* @param cart the cart to set
*/
public void setCart(Cart cart) {
this.cart = cart;
}
}