我正在开发的应用程序是将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端生成。您可能已经注意到两个实体都已启用级联。
任何想法有什么不对?
答案 0 :(得分:1)
我不确定为什么会这样,但我总是看到这个错误。我一直在做的是在开始时,当我添加所有数据时,首先我使用SET DATABASE REFERENTIAL INTEGRITY FALSE
关闭约束,然后在最后我将其转回SET DATABASE REFERENTIAL INTEGRITY TRUE
。这不是一个修复,因为它是一个黑客,但它适用于我们所以我认为我会分享知识。
答案 1 :(得分:0)
仅供参考,原来hibernate配置为使用db序列生成,但是id又在java代码中预先分配。 fmdl