Hibernate对序列sequence的修改
??? 从数据库中取序列的下一个,在网上查找了好多资料终于找到了一个,,如下:
?
public Integer getNextVal() {Number n = (Number) this.getHibernateTemplate().execute(new HibernateCallback() {@SuppressWarnings("unchecked")public Object doInHibernate(Session session)throws SQLException, HibernateException {SQLQuery query = session.createSQLQuery("select seq_sp.nextval SEQID from dual");query.addScalar("SEQID",new org.hibernate.type.IntegerType());List children = query.list();return (Number) children.iterator().next();}});return n.intValue();}
?当时很高兴,但是我要一次取出多个序列,这个问题可难倒我了。网上查了半天找到SQL语句可以修改序列的步长,alter sequence seq increment by10,就是把序列的步长设置为什10。
??? 虽然SQL语句可以实现,但是HQL里面没有alter这个语句。这下我想破脑袋也不知道要怎么办了。偶然的在看上面的代码的时候看到了,SQLQuery这个类,想这个应该是什么SQL语句都可以执行了。就赶快动手写了一下,运行一下。竟然成功了,
public void alterSequence(int value) {SQLQuery query = getHibernateSession().createSQLQuery("alter sequence seq_sp increment by "+value);query.executeUpdate();}?
tbStorageOldProductDao.alterSequence(value); Integer val = tbStorageOldProductDao.getNextVal(); tbStorageOldProductDao.alterSequence(1);?
大功告成,记录一下,不知道有没有什么隐患。。。。。。