更新hibernate序列以生成唯一ID

时间:2018-06-01 12:41:11

标签: postgresql hibernate

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

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

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

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

话虽如此,不建议使用GenerationType.TABLE。它使用悲观锁,可能会降低您的应用程序速度。

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