Postgres hibernate序列值与插入的数据id不匹配
我注意到PostgreSQL数据库中的hibernate_序列有一些有趣的地方。到目前为止,序列(我的数据库中的所有表都使用)一直递增1。然而,情况已经不是这样了 目前,hibernate_序列显示的值为43270。如果我Postgres hibernate序列值与插入的数据id不匹配,hibernate,postgresql,Hibernate,Postgresql,我注意到PostgreSQL数据库中的hibernate_序列有一些有趣的地方。到目前为止,序列(我的数据库中的所有表都使用)一直递增1。然而,情况已经不是这样了 目前,hibernate_序列显示的值为43270。如果我选择nextval('hibernate_sequence')它将正确报告43271 但是,当我将数据插入表中时,序列ID现在是1872053 就我的一生而言,我不知道为什么,但它正在影响我每晚在不同环境之间传输数据的一些数据库脚本 我希望它与下面的文章没有任何关系,这篇文章指
选择nextval('hibernate_sequence')代码>它将正确报告43271
但是,当我将数据插入表中时,序列ID现在是1872053
就我的一生而言,我不知道为什么,但它正在影响我每晚在不同环境之间传输数据的一些数据库脚本
我希望它与下面的文章没有任何关系,这篇文章指出声明@GeneratedValue(strategy=GenerationType.SEQUENCE)
“使用HiLo策略,默认情况下以50个块分配ID。”
如果是这样的话,序列ID会有如此大的跳跃吗?从43271
到1872053
这几乎就像是与hibernate_序列的“断开连接”。当我插入第二个事件时,ID为1872053,但hibernate_序列值不再改变(它仍将保持在43421)
还有其他可能的解释吗
谢谢
代码示例:
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private Integer id;
我相信我正在经历以下帖子中所描述的,这也与HiLo算法有关:您应该向我们展示源代码。但是,是的,序列策略使用了HILO算法。我只是觉得奇怪,hibernate_序列不再改变了?它是静态的43271。在我插入新数据后,它不会更新。然而,新数据似乎是在某种序列上,因为它是1872053、1872054、1872055等等。还有,为什么序列号会跳得这么高?这就是HILO算法的工作原理:它增加序列一次,然后能够进行N次插入,直到它重新增加序列,而你不给我们看源代码,也可能是Hibernate没有使用您认为应该使用的序列。谢谢。我对hibernate不是很熟悉,但我在最初的问题中发布了一些示例代码。您是否正在寻找任何特定的内容(特定的配置文件等)?我在我的项目中搜索了“hibernate_sequence”,但没有找到任何结果。hibernate_sequence
是hibernate在没有明确命名的情况下使用的序列。我想知道这个表是否有一个serial
字段(即一个integer
和一个DEFAULT nextval('tablename\u colname\u id\u seq'))
,您不知何故使用了该序列而不是hibernate\u序列
。请在psql
中尝试\d tablename
,如果有默认值,请尝试从tablename\u colname\u id\u seq中选择*查看该序列的下一个序列值。如果它接近您无法解释的值,则意味着您可能从表自身的序列中获取ID。