2012-09-05 41 views
0

我注意到我的PostgreSQL數據庫中的hibernate_sequence有趣的事情。到目前爲止,序列(我的數據庫中所有表使用的序列)已經增加了1個。然而,情況並非如此。Postgres休眠序列值與插入的數據ID不匹配

目前,hibernate_sequence顯示值爲43270.如果我SELECT nextval('hibernate_sequence');它將正確報告43271

但是,當我將數據插入到我的表中時,序列ID現在是1872053

對於我的生活,我無法弄清楚爲什麼,但它正在影響我運行的一些數據庫腳本,以便在不同環境之間每晚進行數據傳輸。

我希望它與下面的文章沒有任何關係,聲明@GeneratedValue(strategy=GenerationType.SEQUENCE)「使用HiLo策略,默認分配ID爲50的塊。 Hibernate use of PostgreSQL sequence does not affect sequence table

如果是這樣的話,會出現序列ID這麼大的跳躍嗎?從432711872053

這幾乎就像是與hibernate_sequence「斷開連接」。當我插入第二個事件時,ID是1872053,但hibernate_sequence值不再改變(它仍然保持在43421)。

還有其他可能的解釋嗎?

謝謝!


代碼示例:

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE) 
private Integer id; 
+0

你應該告訴我們的源代碼。但是,序列策略使用HILO算法。 –

+0

我只是覺得奇怪的是,hibernate_sequence不再改變?它在43271處是靜態的。插入新數據後它不會更新。然而,新數據似乎是在某種序列上,因爲它是1872053,1872054,1872055等。另外,爲什麼序列號會跳得這麼高呢? – littleK

+0

這就是HILO算法的工作原理:它將序列遞增一次,然後能夠進行N次插入,直到它重新產生序列爲止您不會向我們顯示源代碼,因此ti也可能是因爲Hibernate沒有使用您的序列認爲它應該使用。 –

回答