冬眠&违反了完整性约束

时间:2012-08-15 14:27:07

标签: java oracle hibernate

我正在开发的应用程序是将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对象(关联的Party和Address对象也是新的)。所有id都在java端生成。您可能已经注意到两个实体都已启用级联。

任何想法有什么不对?

2 个答案:

答案 0 :(得分:1)

我不确定为什么会这样,但我总是看到这个错误。我一直在做的是在开始时,当我添加所有数据时,首先我使用SET DATABASE REFERENTIAL INTEGRITY FALSE关闭约束,然后在最后我将其转回SET DATABASE REFERENTIAL INTEGRITY TRUE。这不是一个修复,因为它是一个黑客,但它适用于我们所以我认为我会分享知识。

答案 1 :(得分:0)

仅供参考,原来hibernate配置为使用db序列生成,但是id又在java代码中预先分配。 fmdl