[英]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.