2016-03-30 13 views
0

私はOneToOneの関係で3つのエンティティを持っているProduct - >SkuImpl - >SkuAvailabilityImplConstrainVoilationException:削除または休止状態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を見つけましたが、残念ながらそれは私のために働いていない、誰もがこの問題を解決するためにどのように助けることができます。

+0

削除コードを表示できますか?それはあなたが削除しようとしている管理エンティティですか? –

+0

@MadhusudanaReddySunnapu私の更新されたコードを確認してください...商品を '削除する' EntityManagerを使用してください –

+0

SQLが呼び出されたことを示すログを見ないと、それを解決できます。これはデバッグと呼ばれるプロセスです。 –

答えて

0

をマージし、その後SkuImpl Entitiy内部SkuAvailabilityの子供のためorphanRemoval=trueを追加entity

entityManager.remove(entityManager.merge(entity)); 
+0

私はJPAを使い、 'EntityManager'によって与えられた' remove() 'を使って製品エンティティを削除しています。これは' protected EntityManager manager; manager.remove(エンティティ) ''エンティティ 'は' service'レイヤーからロードしています –

+0

@サブブロイアル私の更新された答えを確認してください。 –

+0

確かにそれを試して、結果を確認する時間がかかります私たちは雲の建物にあり、展開は時間がかかります。 –

0

に削除を呼び出す試してみてください。

+0

あなたの返事をありがとう、 'SkuImpl'と' SkuAvailabilityImpl'または 'skuImpl 'の両方を意味しますか@Rima –

+0

申し訳ありません、答えを編集しました。 SkuAvailability属性のSkuImplエンティティのみ。 – Rima

関連する問題