2012-09-05 43 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没有使用您的序列认为它应该使用。 –

回答