ここでも、非常に単純な問題が発生する可能性があります。データベースは次のようになります。
CREATE TABLE Question (
idQuestion SERIAL,
questionContent VARCHAR,
CONSTRAINT Question_idQuestion_PK PRIMARY KEY (idQuestion),
);
CREATE TABLE Answer (
idAnswer SERIAL,
answerContent VARCHAR,
idQuestion INTEGER,
CONSTRAINT Answer_idAnswer_PK PRIMARY KEY (idAnswer),
CONSTRAINT Answer_idQuestion_FK FOREIGN KEY (idQuestion) REFERENCES Question(idQuestion),
);
したがって、質問には多くの回答があります。Netbeans 7.1.2 によって生成されたエンティティに続いて、次のフィールドがあります。
@OneToMany(mappedBy = "idquestion", orphanRemoval=true, cascade= CascadeType.ALL, fetch= FetchType.EAGER)
private Collection<Answer> answerCollection;
ご覧のとおり、コレクションのカスケード削除について、可能なすべての孤立した削除とカスケード手順を既に追加しました。そして、それはうまく機能していますが、しばらくの間:
アプリケーションの以前の「インスタンス」で作成された場合にのみ、質問と接続された回答を削除できます。最初に新しい質問と 1 つの回答を作成してから、そのまま削除すると、次のようなエラーが発生します。
root cause
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: update or delete on table "question" violates foreign key constraint "answer_idquestion_fk" on table "answer"
Detail: Key (idquestion)=(30) is still referenced from table "answer".
Error Code: 0
Call: DELETE FROM question WHERE ((idquestion = ?) AND (version = ?))
bind => [2 parameters bound]
Query: DeleteObjectQuery(com.accenture.androidwebapp.entities.Question[ idquestion=30 ])
root cause
org.postgresql.util.PSQLException: ERROR: update or delete on table "question" violates foreign key constraint "answer_idquestion_fk" on table "answer"
Detail: Key (idquestion)=(30) is still referenced from table "answer".
アプリケーションを再起動 (再構築、再デプロイ) すると、動作しますが..なぜですか? ありがとう!