私はOneToOne
の関係で3つのエンティティを持っているProduct
- >SkuImpl
- >SkuAvailabilityImpl
ConstrainVoilationException:削除または休止状態JPAで親行を更新することはできません
製品
@Entity
public class ProductImpl implements Product {
@OneToOne(targetEntity=SkuImpl.class, cascade= {cascadeType.ALL},orphanRemoval=true)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
@JoinColumn(name="DEFAULT_SKU_ID")
protected Sku defaultSku;
//setter and getters
}
SkuImpl
@Entity
public class SkuImpl implements Sku {
@OneToOne(targetEntity=SkuAvailabilityImpl.class, cascade= {cascadeType.ALL},fetch=FetchType.LAZY)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
@JoinColumn(name="SKU_AVAILABILITY_ID",referencedColumnName="SKU_AVAILABILITY_ID")
@LazyCollection(LazyCollectionOption.FALSE)
protected SkuAvailability totalSku;
//product
@OneToOne(targetEntity=ProductImpl.class, cascade= {cascadeType.ALL})
@JoinColumn(name="DEFAULT_PRODUCT_ID")
protected Product defaultProduct;
//setter and getters
}
SkuavailabilityImpl.java DAO
protected EntityManager manager;
public void remove(Serializable entity){
manager.remove(entity);
manager.flush();//here getting an exception
}
で
@Entity
public class SkuAvailabilityImpl implements SkuAvailability{
@OneToOne(optional=true,targetEntity=SkuImpl.class)
@Cascade(value={org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name="SKU_ID", referencedColumnName='SKU_ID',insertable=false,updatable=false)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
protected Sku sku;
//setter and getters
}
私はProduct
レコードが各テーブルに挿入される挿入します。しかし、問題は私が解決策をググexcpetion
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintVoilationException: Cannot delete or update a parent row: a foreign key constraint fails (`ssz01b`.`blc_product`, CONSTRAINT `FKBC3A8A84B` FOREIGN KEY (`DEFAULT_SKU_ID`) REFERENCES `blc_sku` (`SKU_ID`))
なっproduct
を削除しようとしたときですが、私は問題を解決することができorphanRemoval=true
を見つけましたが、残念ながらそれは私のために働いていない、誰もがこの問題を解決するためにどのように助けることができます。
削除コードを表示できますか?それはあなたが削除しようとしている管理エンティティですか? –
@MadhusudanaReddySunnapu私の更新されたコードを確認してください...商品を '削除する' EntityManagerを使用してください –
SQLが呼び出されたことを示すログを見ないと、それを解決できます。これはデバッグと呼ばれるプロセスです。 –