OneToMany 関係を持つエンティティを削除しようとすると、リストを使用してページを読み込んでいるときにこのエラーが発生するため、助けを求めています。
MySQLIntegrityConstraintViolationException: 親行を削除または更新できません: 外部キー制約が失敗します
もちろん、子のカスケード削除に関連していることは理解していますが、どこが悪いのかわかりません。
子との関係に関連する親エンティティ パーツ:
@Entity
@Table(name="PARENT")
public class Parent implements Serializable {
...
@OneToMany (mappedBy = "parent", orphanRemoval = true, cascade={CascadeType.ALL}, targetEntity = Children.class)
@JoinColumn(name = "parent_id")
private List <Children> children;
...
}
親との関係に関連する子エンティティ パーツ:
@Entity
@Table(name = "CHILDREN")
public class Children implements Serializable {
...
@ManyToOne(targetEntity = Parent.class, cascade = CascadeType.ALL)
@JoinColumn
private Country country;
エンティティを削除する JSF ボタン:
<p:button onmouseup="#{parentBean.remove(parent)}" value="Delete" />
豆:
getEntityManager().remove(getEntityManager().merge(parent));
例外:
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`control`.`children`, CONSTRAINT `FK_CHILDREN_COUNTRY_ID` FOREIGN KEY (`COUNTRY_ID`) REFERENCES `countries` (`ID`))
Error Code: 1451
Call: DELETE FROM PARENT WHERE (ID = ?)
bind => [1 parameter bound]
Query: DeleteObjectQuery(com.frys.model.Country[ id=2 ])
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl$1.handleException(EntityManagerSetupImpl.java:692)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.handleException(AbstractSynchronizationListener.java:275)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:170)
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:452)
... 86 more
前もって感謝します!