簡體   English   中英

Oracle 序列不會從 Java/Hibernate 增加

[英]Oracle sequence does not increment from Java/Hibernate

我有以下函數在 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;        
    }
}

當我在控制台中打印上述函數返回的值時,我可以看到正確的下一個值。 但是,當我在數據庫上運行“select sequence_test.currval from dual”時,該值與控制台中的值不對應。 如果我從 PL/SQL Developer 重新連接到 Oracle DB 並運行“select sequence_test.nextval from dual”,結果會增加 2(我猜一次是由 java 函數,另一次是由手動執行的查詢)。

你能幫我理解這種情況嗎?

sequence.currval鏈接到您的數據庫會話,實際上並不是您所指的序列的當前值。 本質上currval將返回nextval為給定會話生成的最后一個值。

這是因為序列可能會被多個會話更改,因此會話獨立當前值的想法很少有意義。

雖然這個屬性的名稱肯定令人困惑......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM