我有一个使用标准 Hibernate JPA 和 Liquibase 运行的应用程序来生成数据库。我在运行时使用 H2 进行测试和 PostgreSQL。
我的问题是我似乎无法让这个设置很好地用于生成序列的主键。
当我有这样的实体 id 时:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
并使用 liquibase 创建数据库,如下所示:
<column name="id" type="BIGINT" autoIncrement="true" incrementBy="1">
<constraints nullable="false" primaryKey="true" />
</column>
它在 H2 中运行良好,但对于 PostgreSQL Hibernate 抱怨它是:
"Missing sequence or table: hibernate_sequence"
我可以通过将 JPA @GeneratedValue 更改为以下内容来为 PostgreSQL 修复此问题:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "text_id_seq")
@SequenceGenerator(name = "text_id_seq", sequenceName = "text_id_seq", allocationSize = 1)
private Long id;
但是现在 H2 序列与 Hibernate 所期望的不匹配。
似乎没有任何简单的方法可以确保 Liquibase 具有特定名称的序列。我该怎么做才能使此设置正常工作?
我看起来像我目前正在运行
- liquibase.version 2.0.4
- 休眠 4.1.7
- postgres 驱动程序 9.1-901.jdbc3
- postgres 9.2.1(至少在本地)
- h2 1.3.168