场景:
在执行保存方法时报错can not insert null to xxx.(ID)
分析:
这个错误表明时因为数据库id设置了主键唯一且不为空,而插入的时候为null所以报错,我的项目使用的oracle数据库,跟mysql数据库直接设置自增不一样,oracle需要先创建序列和触发器配合使用才能实现自增
解决:
1.建一个触发器sql:
CREATE OR REPLACE TRIGGER CLE_FUND_ADJU_APPLY_ID_TRIGGER(触发器名) before
insert on CLE_FUND_ADJU_APPLY(表名) for each row
begin
select SEQ_CLE_FUND_ADJU_APPLY(序列名).nextval into:new.id(自增字段名) from dual(oracle中的虚拟表);
end CLE_FUND_ADJU_APPLY_ID_TRIGGER(触发器名);
2.建一个sequencesql:
create sequence SEQ_CLE_FUND_ADJU_APPLY(序列名)
minvalue(最小值) 1
nomaxvalue(如果间隔值>0说明是递增序列可以不需要最大值就使用nomaxvalue代替maxvalue 9999999999,如果间隔值<0说明是递减序列可以不需要最小值就可以使用nominvalue)
start with(起始值:默认为1) 1
increment by(间隔数:每次加多少,如果省略,则默认为1) 1
nocycle(一直累加,不会循环)
nocache(不用缓存);