Oracle序列不会从Java / Hibernate增加

时间:2017-02-23 14:04:39

标签: java oracle hibernate sequence

我有以下函数在Oracle序列上调用nextval,但我注意到一个奇怪的行为。功能是:

public class DAOImplementation{
    private static SessionFactory factory;
    private Session session;

    public BigDecimal getSequenceNextVal(){
        BigDecimal result = null;
        factory = HibernateUtil.getSessionFactory();
        session = factory.openSession();
        String sql = "select sequence_test.nextval from dual";
        Query query = session.createSQLQuery(sql);
        result = (BigDecimal) query.uniqueResult();
        session.close();
        return result;        
    }
}

当我在控制台中打印上述函数返回的值时,我可以看到正确的下一个值。但是,当我在DB&#34上运行时,从dual"中选择sequence_test.currval。该值与控制台中的值不对应。 如果我从PL / SQL Developer重新连接到Oracle DB并运行"从dual"中选择sequence_test.nextval,结果会增加2(我猜一次是java函数,再一次是执行查询手动地)。

你能帮助我理解这种情况吗?

1 个答案:

答案 0 :(得分:2)

sequence.currval链接到您的数据库会话,实际上并不是您所指的意义上的序列的当前值。基本上currval将返回nextval为给定会话生成的最后一个值。

这是因为序列很可能被多个会话改变,因此会话独立当前值的想法很少有意义。

这个属性的名称当然令人困惑......