如何重新启动Hibernate处理的PostgreSQL序列?

如何重新启动Hibernate处理的PostgreSQL序列?,hibernate,postgresql,Hibernate,Postgresql,我的任务是重新启动PostgreSQL数据库中许多不同序列列的序列。通常,我只会使用: ALTER SEQUENCE serial RESTART WITH 105; 但是,似乎正在使用Hibernate来处理数据库序列。我对Hibernate一无所知,但我的理解是Hibernate_序列是所有表的全局序列。对吗 我假设我需要做以下工作: ALTER SEQUENCE hibernate_sequence RESTART WITH 105; 但我不确定后果会是什么。假设我有表A、B、C和D。

我的任务是重新启动PostgreSQL数据库中许多不同序列列的序列。通常,我只会使用:

ALTER SEQUENCE serial RESTART WITH 105;
但是,似乎正在使用Hibernate来处理数据库序列。我对Hibernate一无所知,但我的理解是Hibernate_序列是所有表的全局序列。对吗

我假设我需要做以下工作:

ALTER SEQUENCE hibernate_sequence RESTART WITH 105;
但我不确定后果会是什么。假设我有表A、B、C和D。每个表都有一个serial类型的ID列。上面关于hibernate_序列的SQL语句是否会重新启动所有表的ID列


谢谢

首先,这里有一个突出的问题:你对待序列的值就像它们意味着什么一样。请看答案的结尾

现在,使用Hibernate,这取决于用户如何配置映射。配置良好的Hibernate实例将使用与其他实例相同的序列

不幸的是,大多数映射都不是很好——或者更确切地说,我认为Hibernate的默认行为很糟糕,应该总是被覆盖。对于所有表,使用的默认序列实际上是共享的
hibernate\u序列。但是,完全可以让一些表使用它们自己的序列,而其他表使用共享的
hibernate\u序列
,或者让所有表正确地使用它们自己的序列

要获得明确的答案,您需要发布映射

如果要更改ID生成的表在其Hibernate映射中为其表使用了正确的序列,您可以继续并
ALTER SEQUENCE
该序列。如果您的映射是通过JPA进行的,则使用
@SequenceGenerator
@GeneratedValue
使用
GenerationType.SEQUENCE
完成。如果是通过
orm.xml
hbm.xml
或老式的Hibernate注释完成的,则需要查看手册。或者,如果Hibernate是唯一一个向DB写入数据的客户机,请使用
SELECT*FROM sequence\u name
查看序列,看看它们是否在上升

如果感兴趣的表的映射使用的是共享的
hibernate\u序列
,如果不修复hibernate映射,您可能无法执行您想要的操作。您需要更改映射,以便感兴趣的表的映射使用不同的序列,然后将这些序列的起点设置为表中当前最大的行


序列:为什么需要更改或重新启动序列?这不重要,因为合成主键只是一个无意义的数字,您可以将它与其他无意义的数字进行相等性比较。您试图解决的问题是什么?

映射是用JPA完成的,因此,例如,所有类(作为表映射到数据库)都有一个“整数id=-1”,并将映射定义为“@GeneratedValue(strategy=GenerationType.SEQUENCE)”。由于数据库中只有一个序列(hibernate_序列),并且由于所有不同表中的ID值之间存在差异,我认为可以安全地假设默认序列在所有表中共享,正如您所提到的。所有这些表都需要重新启动序列,以避免数据库传输中出现冲突。@littleK没问题。希望对你有点帮助。正在合并数据库。。。嗯。。。“有趣”。特别有趣。希望你买了很多很多杜松子酒。