0

私が取り組んでいるアプリは、ORMとしてOracleとHibernateを使用しています。PartyUserObjectを挿入しようとすると、次のエラーが発生し続けます。

could not insert: [Person]; SQL [insert into PARTY (............)]; constraint [PARTY_FK1]
java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (PARTY_FK1) violated - parent key not found

メッセージは明白なようですが、Hibernateを構成して機能させることはできません。関連するエンティティの関係とhbm.xmlファイルは次のとおりです。

PartyUser.java

private Party ap;

Party.java

private Address address;
private Set<PartyUser> partyUsers;

PartyUser.hbm.xml

<many-to-one
            name="ap"
            column="AP_ID"
            class="Party"
            not-null="true"
            lazy="false"
            cascade="save-update,evict">
</many-to-one>

Party.hbm.xml

<set name="partyUsers" inverse="true" fetch="subselect">
    <key column="AP_ID"/>
    <one-to-many class="PartyUser"/>
</set>

PARTY_FK1は、パーティテーブルのアドレスFKを参照します。前に述べたように、新しくインスタンス化されたPartyUserオブジェクトに対してDAOでsaveが呼び出されます(関連付けられたPartyオブジェクトとAddressオブジェクトも新しいものです)。すべてのIDはJava側で生成されます。お気づきかもしれませんが、両方のエンティティでカスケードがオンになっています。

何が問題なのですか?

4

2 に答える 2

1

なぜこれが発生するのかはわかりませんが、常にこのエラーが発生します。私がやってきたことは、最初に、すべてのデータを追加するときに、最初に:を使用して制約をオフにSET DATABASE REFERENTIAL INTEGRITY FALSEし、最後にそれをオンに戻すことSET DATABASE REFERENTIAL INTEGRITY TRUEです。それはハックなのでそれほど修正ではありませんが、それは私たちのために働くので、私は知識を共有したいと思いました。

于 2012-08-15T14:49:02.407 に答える
0

参考までに、hibernate は db シーケンス生成を使用するように構成されていたことが判明しましたが、ID は Java コードで事前に割り当てられていました。fmdl

于 2012-08-16T08:14:30.577 に答える