Oracle作为序列,MySQL作为标识的Hibernate 5 ID AUTO生成类型

问题描述 投票:0回答:1

我们有一个使用Hibernate 5的Java程序,可以使用其他数据库引擎(Oracle,PostgreSQL或SQL Server)进行安装。现在我们介绍MySql。

实体具有生成值自动标识符。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;

到目前为止,效果很好。 Oracle和PostgreSQL安装使用HIBERNATE_SEQUENCE序列生成ID值,而SQL Server使用表生成的ID(IDENTITY)。

对于MySQL,我们也希望使用表生成的ID,但是MySQL上的Hibernate 5 GenerationType.AUTO尝试使用TABLE生成器而不是IDENTITY生成器。

[Vlad Mihalcea发现了this solution,其中使用本机生成器使Hibernate选择MySQL的IDENTITY:

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
protected Long id;

对于MySQL很好,但是随后该应用程序不再在Oracle中运行(ORA-02289:序列不存在)。 I think然后,Hibernate在Oracle DB中搜索一个称为native的序列。

是否有一种解决方案可以使所有其他数据库引擎(Oracle,PostgreSQL和SQL Server)的ID生成保持相同,并为MySQL使用IDENTITY?

如果不是我能看到的唯一解决方案,就是在MySQL中实现TABLE ID的生成,但似乎是not to have a good performance

java mysql oracle hibernate
1个回答
0
投票

我几乎在问题中遇到了这个问题,但是如果有人陷入同样的​​情况:调用生成器HIBERNATE_SEQUENCE将使其与Oracle和PostgreSQL向后兼容(SQL Server将继续使用IDENTITY)。

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_SEQUENCE")
@GenericGenerator(name = "HIBERNATE_SEQUENCE", strategy = "native")
protected Long id;
© www.soinside.com 2019 - 2024. All rights reserved.