Oracle を使用する WebLogic 10.0.x で OpenJPA (JPA 1.0) を使用しています。OneToMany 関係を以下のように定義しました。
@Entity
public class Compound implements Serializable {
...
@OneToMany(mappedBy="compound", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private List<Submission> submissions = new ArrayList<Submission>();
...
}
@Entity
public class Submission implements Serializable {
...
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.REFRESH)
@JoinColumn(name="compoundId")
private Compound compound;
...
}
複合エンティティを削除すると、すべての子提出エンティティも削除する必要があります。これらのテーブルに外部キー制約を設定していることを除いて、これは一般的なルールとして機能します。
ALTER TABLE SUBMISSION
ADD CONSTRAINT FK_SUBMISSION_COMPOUND
FOREIGN KEY (COMPOUNDID)
REFERENCES COMPOUND(COMPOUNDID);
複合エンティティを削除しようとすると、次の例外が発生します。
ORA-02292: integrity constraint (HELC.FK_SUBMISSION_COMPOUND) violated - child record found {prepstmnt 3740 DELETE FROM Compound WHERE compoundId = ? [params=(long) 10384]} [code=2292, state=23000]"
上記の例外は、子エンティティに削除をカスケードする前に、Open JPA が親を削除しようとしていることを意味します。2006 年にさかのぼる、この例外に関する Google の記事をいくつか読みました。
https://issues.apache.org/jira/browse/OPENJPA-235
これが機能しない理由と、それに対して何ができるかを誰かが提案できますか? 子エンティティを手動で削除するのは嫌いです。特に、これは私のスキーマでそれほど複雑ではない関係の 1 つであり、これに使用するソリューションは別の場所に適用する必要があるためです。
ありがとうジェイ