- 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