从数据库中取序列的下一个,在网上查找了好多资料终于找到了一个, ,如下:
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);
大功告成,记录一下,不知道有没有什么隐患。。。。。。