hibernate_sequence为什么以及如何用于id generatior

Ser*_*sky 5 postgresql hibernate jhipster

我遇到了JHipster生成的实体ID生成问题:

  1. H2数据库上的Dev环境
  2. Postgres上的产品环境
  3. 我有一个实体"站",有两个字段"id"和"name"
  4. 创建一个liquibase脚本,它在"station"表中导入字典,就像 INSERT INTO station (name) VALUES ('Adygeya')没有ID定义一样
  5. 试图在开发环境中添加工作站 - 好的
  6. 试图在prod上添加工作站 - Hibernate尝试添加具有重复ID的新工作站

为什么?

我的研究表明,只有postgres和oracle在初始方案中jhipster创建了一个新的sequince"hibernate_sequence",用于创建新实体.

所以我通过为我的实体ID生成规则添加特定的序列名来解决这个错误的行为

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "station_gen")
@SequenceGenerator(name = "station_gen", sequenceName = "station_id_seq")
private Long id;
Run Code Online (Sandbox Code Playgroud)

现在我只有3个问题:

  1. 为什么JHipster使用一个sequince为postgres和oracle的所有表?
  2. 在哪里配置?
  3. 我究竟做错了什么?

Ser*_*sky 2

将在这里发布我的答案,这是在 @Ga\xc3\xablMarziou 和 @Julien Dubois 的帮助下找到的。

\n\n

这是因为 Hibernate hilo 算法与 GenerationType.AUTO 的历史和默认行为。MySQL 不支持序列,所以 JHipster 需要使用这个愚蠢的算法

\n\n

JHipster 团队找到了正确的解决方案,可以解决我的问题。解决方案是对所有数据库使用 GenerationType.SEQUENCE,但对 MySql 使用 GenerationType.IDENTITY。此提交中的所有详细信息https://github.com/jhipster/generator-jhipster/commit/4516b4ff4d49a96a75fd963b0c7667f198bd9b79

\n\n

这样我现在也将配置我的实体。

\n