想用Myeclipse中hibernate的反向工程映射Oracle中的表,id生成选择了Sequence.映射失败。然后看数据库中的表,发现id不能自动生成,于是参照网上的方法在Oracle中新建了一个sequence,新建了一个触发器。CREATE SEQUENCE test_sequence //序列名
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE;create or replace trigger sysrole_id   //触发器名
before insert on "NUMBERS"."TESTS"----(tests为表名,NUMBERS为用户名)
for each row----触发每一行
begin
select test_sequencee.nextval into :new.id from dual;
end;
运行之后,在表里插入数据,id仍然不能自动增长。还报出不能为空的错误。
急等!!!!!!!

解决方案 »

  1.   

    1、你序列名写错了:select test_sequencee.nextval into :new.id from dual;
    2、试试这样呢:
    create or replace trigger sysrole_id //触发器名
    before insert on NUMBERS.TESTS----(tests为表名,NUMBERS为用户名)
    for each row----触发每一行
    begin
    select test_sequence.nextval into :new.id from dual;
    end;
      

  2.   

    create or replace trigger "BI_EMP"  
      before insert on "TEST2"              
      for each row 
    begin  
        select "EMP_SEQ".nextval into :NEW.TEXTID from dual;
    end;create sequence EMP_SEQ
    minvalue 1
    maxvalue 9999999999
    start with 10
    increment by 1
    cache 20;我是参照网上的写的。后来发现问题出在我以前错误的触发器一直没删。删了以后就可以用了。。
    谢谢各位帮忙啊!多谢!刚刚参加工作第一次用Oracle做项目,难哦
      

  3.   

    难怪单纯的从你trigger没看出什么大的错误来
      

  4.   

    你都使用HIBERNATE了,完全可以在映射文件中指定你自己建立的SEQUENCE,由HIBERNATE来调用
      

  5.   

    恩。。只能。后来就只能这么做了。开始的时候想用Eclipse自动生成。但是Eclipse在选SEQUENCE的时候就不能映射。后来查了用native就能自动匹配