【发布时间】:2017-01-05 00:29:16
【问题描述】:
我在为 JHipster 生成的实体生成 ID 时遇到问题:
- H2 数据库上的开发环境
- Postgres 上的生产环境
- 我有一个实体“station”,其中包含两个字段“id”和“name”
- 创建一个 liquibase 脚本,在“站”表中导入字典,例如
INSERT INTO station (name) VALUES ('Adygeya')没有 ID 定义 - 尝试在开发环境中添加工作站 - 好的
- 尝试在 prod 上添加站 - Hibernate 尝试添加具有重复 ID 的新站
为什么?
我的研究表明,仅在初始方案 jhipster 中为 postgres 和 oracle 创建了一个新序列“hibernate_sequence”,用于创建新实体。
所以我通过为我的实体 ID 生成规则添加特定的序列名称来解决这个错误的行为
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "station_gen")
@SequenceGenerator(name = "station_gen", sequenceName = "station_id_seq")
private Long id;
现在我只有 3 个问题:
- 为什么 JHipster 对 postgres 和 oracle 的所有表使用一个序列?
- 在哪里配置?
- 我做错了什么?
【问题讨论】:
-
JHipster 的哪个版本?我认为这是 spring-data 或 Hibernate 中的默认策略。对所有表仅使用一个序列并不能解释重复键问题。我有相同的设置,但没有遇到它。
-
是的,这是默认的 Hibernate 策略。
-
@GaëlMarziou JHipster v. 3.9.1
-
@GaëlMarziou 第 4 项中问题的现实。我直接通过 SQL 在表中添加具有自己序列的新对象。例如 3 次。在本地序列中,它将是 4 - nextval,对于 hibernate_sequence,它将是 1。一旦我将使用 hibernate 创建新对象,它将是重复的。
-
@JulienDubois 你能建议如何改变这种行为吗?
标签: postgresql hibernate jhipster