0

我正在开发的一个应用程序使用 Oracle 和 Hibernate 作为 ORM。当我尝试插入 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。正如我之前所说,在 DAO 上为新实例化的 PartyUser 对象调用 save (关联的 Party 和 Address 对象也是新的)。所有 id 都是在 java 端生成的。正如您可能注意到的那样,两个实体都打开了级联。

有什么想法有什么问题吗?

4

2 回答 2

1

我不确定为什么会发生这种情况,但我一直看到这个错误。我一直在做的是一开始,当我添加所有数据时,首先我用: 关闭约束,SET DATABASE REFERENTIAL INTEGRITY FALSE然后在最后我把它重新打开SET DATABASE REFERENTIAL INTEGRITY TRUE。与其说是修复,不如说它是一个 hack,但它对我们有用,所以我想我会分享知识。

于 2012-08-15T14:49:02.407 回答
0

仅供参考,事实证明 hibernate 被配置为使用 db 序列生成,但 id 又在 java 代码中预先分配。fmdl

于 2012-08-16T08:14:30.577 回答