我在编程的时候遇到一个问题:是一个一对多的问题。
首先说一下我的系统的有关事项吧:我在oracle数据库中新建表,同时新建序列和触发器,hibernate使用的主键生成策略是“native”,在增加一条记录的时候,调用触发器
create or replace trigger COMPANY_tri
before insert
on COMPANY
for each row
begin
select COMPANY_seq.nextval into:new.id from dual;
end;
在其他的增删改查方法中运行一直是正常的,前几天有一个一对多的问题,我想使用级联保存,但是总是不成功,原因是“多”的一方总是找不到“一”的一方的主键,
异常显示:Caused by:java.sql.BatchUpdateException: ORA-02291
Oracle给的解决方案是这样的(这是针对单纯的Oracle的解决方法)
ORA-02291 integrity constraint (string.string) violated - parent key not found
Cause: A foreign key value has no matching primary key value.(原因:外键值没有匹配的主键值与它匹配)
Action: Delete the foreign key or add a matching primary key.(解决:删除外键关联或者添加一个和外键匹配的主键值)
究其根本,发现是因为我使用了触发器,hibernate生成的主键值和数据库中的触发器生成的主键值是不相同的,我禁止了触发器,将hibernate的主键生成策略变为”sequence“ 之后一对多的操作便成功了。
希望对出现同样问题的同学有所帮助
本文讨论了在使用Oracle数据库、Hibernate和触发器时遇到一对多操作冲突的解决方案,详细介绍了通过调整主键生成策略和触发器配置来解决外键关联问题的方法。


被折叠的 条评论
为什么被折叠?



