我有一个表,其中生成了id(这是主键),如下所示:
@Id
@TableGenerator(name="idGen")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "idGen")
private Long id = -1L;
我手动将记录插入此数据库以解决问题。但是现在当应用程序重新启动时,数据库似乎无法识别已手动插入的新ID并再次重新生成相同的ID。
如何解决此问题?
答案 0 :(得分:0)
使用GenerationType.TABLE
时,当前ID存储在表格中。表的名称可能在某处配置,idGen
作为标识符。您可能需要更新此表以反映您手动分配的ID。您可能还必须重新启动应用程序,因为它可能已缓存了下一个要分配的ID。
话虽如此,不建议使用GenerationType.TABLE
。它使用悲观锁,可能会降低您的应用程序速度。
相反,如果您的数据库支持,则应使用GenerationType.SEQUENCE
。如果您想要简单的东西,在直接在数据库中插入行时也可以使用,您可以使用GenerationType.IDENTITY
,它依赖于数据库中列的自动编号。虽然很简单,但它并不是最高效的。但如果插入物的数量相对较少,则可能没什么大不了的。