微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对于PostgreSQL和H2,Liquibase和Hibernate JPA之间的序列名称不兼容

我有一个运行标准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
> hibernate 4.1.7
> postgres驱动程序9.1-901.jdbc3
> postgres 9.2.1(至少在本地)
> h2 1.3.168

使用GenerationType.IDENTITY.这适用于大多数DB.

在我看来,身份生成是JPA的一个瑕疵;基于您正在使用的数据库等为生成选项设置全局覆盖太难了.在注释中进行操作会使编程难以调整.

Hibernate奇怪的hibernate_sequence特别痛苦.它超出了我的原因,它不会将Postgresql认序列用于生成的列.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐