Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres hibernate序列值与插入的数据id不匹配_Hibernate_Postgresql - Fatal编程技术网

Postgres hibernate序列值与插入的数据id不匹配

Postgres hibernate序列值与插入的数据id不匹配,hibernate,postgresql,Hibernate,Postgresql,我注意到PostgreSQL数据库中的hibernate_序列有一些有趣的地方。到目前为止,序列(我的数据库中的所有表都使用)一直递增1。然而,情况已经不是这样了 目前,hibernate_序列显示的值为43270。如果我选择nextval('hibernate_sequence')它将正确报告43271 但是,当我将数据插入表中时,序列ID现在是1872053 就我的一生而言,我不知道为什么,但它正在影响我每晚在不同环境之间传输数据的一些数据库脚本 我希望它与下面的文章没有任何关系,这篇文章指

我注意到PostgreSQL数据库中的hibernate_序列有一些有趣的地方。到目前为止,序列(我的数据库中的所有表都使用)一直递增1。然而,情况已经不是这样了

目前,hibernate_序列显示的值为43270。如果我
选择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。