sequence创建语句:
create sequence CB_SEQUENCE
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;当用程序做插入操作时,该sequence以步长为2 增加。但是在做select CB_SEQUENCE.nextval from dual时,是以步长为1增加的。该sequence只用于一个表。奇怪啊!各位大侠指教一下为什么?

解决方案 »

  1.   

    主要就这一句,前面就是赋值
    cbctot为实体类实例
    dao.update(cbctot)
      

  2.   

    肯定是多取了一次,贴出涉及该sequence的代码看看
      

  3.   

    保存数据时,方法如下:public void saveCBInfo(CBForm form) 
    {
    Cb cbcto = new Cb();
    cbcto.setCycleday(Long.valueOf(form.getCycleDay()));
    cbcto.setMaintaindate(new FDate().getDate(PubFun.getCurrentDate()));
    cbcto.setMaintaintime(PubFun.getCurrentTime());
    cbcto.setMaintainer(form.getOperator());
    CbId id = new CbId();
    id.setDealtype("1");
    id.setManagecom(form.getComCode());
    cbcto.setId(id);

    Cbt cbctot = new Cbt();
    cbctot.setCycleday(cbcto.getCycleday());
    cbctot.setMaintaindate(cbcto.getMaintaindate());
    cbctot.setMaintainer(cbcto.getMaintainer());
    cbctot.setMaintaintime(cbcto.getMaintaintime());
    cbctot.setManagecom(form.getComCode());
    cbctot.setDealtype("1"); dao.update(cbcto);
    dao.update(cbctot);
    }Cbt表有序列
    序列在hbm.xml中
      

  4.   

    cache 20;  改成nocache吧另跟踪一下代码查一下nextval看看有没有取两次
      

  5.   

    之前改过nocache,但没什么变化,应该不是cache的原因,另外
    后台输出Hibernate: select CB_SEQUENCE.nextval from dual,只一回。
    debug时发现:select CB_SEQUENCE.nextval from dual之后是正确数据,
    但是insert into CBT 之后,又加了1,为什么呢?
      

  6.   

    不知道你是怎么作的,是不是执行select CB_SEQUENCE.nextval from dual把结果存到变量里,然后insert的时候引用变量。
    我怀疑你的代码insert的时候又取了一次CB_SEQUENCE.nextval
      

  7.   

    superhsj说的有道理,这个肯定和你的代码有关系,还得仔细检查了:)
      

  8.   


    谢谢,确实是在insert之前又CB_SEQUENCE.nextval了一次。
    不是程序问题,是自己在建立sequence时,又加了一个TRIGGER。
    以前没怎么试过sequence,搜了一个建立语句,就用上了。
    这次学到了!不管怎样谢谢你,结贴喽!