首先,这里有一个潜在的问题:您将序列的值视为有意义的东西。请看答案的结尾。
现在,使用 Hibernate,它取决于用户如何配置映射。一个配置良好的 Hibernate 实例将使用与其他所有实例相同的序列。
不幸的是,大多数映射都不是很好——或者更确切地说,我认为 Hibernate 的默认行为很糟糕,应该始终被覆盖。使用的默认序列确实是hibernate_sequence
所有表的共享序列。但是,完全有可能让一些表使用它们自己的序列,而其他表使用 shared hibernate_sequence
,或者让所有表都正确地使用它们自己的序列。
要启用明确的答案,您需要发布您的映射。
如果您要更改其 ID 生成的表在其 Hibernate 映射中为其表使用正确的序列,您可以继续ALTER SEQUENCE
使用该序列。如果您的映射是通过 JPA 进行的,则使用 a@SequenceGenerator
和@GeneratedValue
with完成GenerationType.SEQUENCE
。如果它是通过或旧式 Hibernate 注释完成的,您需要查看手册orm.xml
。hbm.xml
或者,如果 Hibernate 是唯一写入数据库的客户端,请查看序列以查看它们是否正在使用SELECT * FROM sequence_name
.
如果感兴趣的表的映射正在使用共享hibernate_sequence
,那么如果不修复 Hibernate 映射,您可能无法做您想做的事情。您需要更改映射,以便感兴趣的表的映射使用不同的序列,然后`LOCK TABLE
将这些序列的起点设置为表中当前最大的行。
序列:为什么需要更改或重新启动序列?没关系,因为合成主键只是一个无意义的数字,您可以将其与其他无意义的数字进行比较。您要解决的问题是什么?