【问题标题】:Update hibernate sequences to generate unique ids更新休眠序列以生成唯一 ID
【发布时间】:2018-06-01 12:41:10
【问题描述】:

我有一个表,其中生成了 id(这是主键),如下所示:

@Id
@TableGenerator(name="idGen")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "idGen")
private Long id = -1L;

我已手动将记录插入此数据库以解决问题。但是现在,当应用程序重新启动时,数据库似乎无法识别手动插入的新 id,并且正在重新生成相同的 id。

我该如何解决这个问题?

【问题讨论】:

    标签: postgresql hibernate


    【解决方案1】:

    当您使用GenerationType.TABLE 时,当前 id 存储在一个表中。表的名称可能在某处配置,idGen 作为标识符。您可能必须更新此表以反映您手动分配的 ID。您可能还需要重新启动您的应用程序,因为它可能已经缓存了接下来要分配的几个 id。

    话虽如此,不推荐使用GenerationType.TABLE。它使用悲观锁,可能会减慢您的应用程序。

    如果您的数据库支持,您应该使用GenerationType.SEQUENCE。如果你想要一些简单的东西,当直接在数据库中插入行时也可以使用,你可以使用GenerationType.IDENTITY,它依赖于数据库中列的自动编号。虽然简单,但它并不是最高效的。但如果插入的数量相对较少,可能没什么大不了的。

    【讨论】:

    • 我设法找到了生成序列的表。由于没有给出表名,它使用的是 hibernate_sequences 表。所以如果sequence_next_hi_value当前是5,我应该运行下面的查询update hibernate_sequences set sequence_next_hi_value = 6 where sequence_next_hi_value = 5 and sequence_name = 'userTable'然后重新启动系统吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多