Hibernate:save()后获取oracle 自增主键和数据生成的逐渐不一致
Java code
public boolean save(Cardownerinfo ownerinfo) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(ownerinfo);
tx.commit();
return true;
} catch (RuntimeException re) {
tx.rollback();
log.error("==CardownerinfoSevices save failed==", re);
re.printStackTrace();
} finally {
session.close();
}
return false;
}
测试方法:
Java code
public void testSave() {
Cardownerinfo ownerinfo = new Cardownerinfo();
ownerinfo.setOwnername("人卡465");
ownerinfo.setCreatetime(new Date());
CardownerinfoSevices ownerinfoSer = new CardownerinfoSevices();
boolean save = ownerinfoSer.save(ownerinfo);
if (save) {
System.out.println(ownerinfo.getOwnerid());
System.out.println("successfuly");
} else {
System.out.println("failed");
}
}
输出结果:
109
successfuly
用MyEclipse 的debug看出自增主键也是109
然后在数据库中查询发现生成的记录是
110 人卡465
oracle数据库中的生成的记录基数都是2
oracle 序列:
SQL code
CREATE SEQUENCE "TYZHUSER"."CARDOWNERINFO_S" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 121 CACHE 20 ORDER NOCYCLE
为什么hibenrate是加一,而oracle是加2?
------解决方案--------------------
我知道你主键生成策略是seq 请你把我上面的答案再看一遍 触发seq的nextVal的方式不一定非得是保存数据 只要Hibernate使用了保存方法肯定就会调用他一次
另外 好象Hibernate能设置seq的跨度是多少吧..
------解决方案--------------------学习了..
------解决方案--------------------是不是Transaction 在搞怪。设置为autocommit(true)试试 如果是这个问题 那么实际出入的值是多少由于并发性的影响就不好判断了 本身就一个语句 成功与否不用rollback吧。 可以讲事物去掉试试
------解决方案--------------------学习了······
------解决方案--------------------帮楼主顶起,自己也学习下。
------解决方案--------------------
------解决方案-------------------- 可能和主键生成策略有关吧
------解决方案--------------------学习一下,hibernate