mysql - 从 Hibernate 3.6 迁移到 5.1 时 GenerationType.AUTO + @SequenceGenerator 的不同行为

标签 mysql oracle hibernate jpa

在 Hibernate 3.6 中,我们在 MySql 和 Oracle 上都有一个工作代码:

@Id
@Column(name = "id", nullable = false)
@SequenceGenerator(name = "applicationEventLog", sequenceName = "S_APPLICATION_EVENT_LOG")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "applicationEventLog")
private Integer id;

在 MySql 上使用自动增量,在 Oracle 上它使用 sequenceName 声明的序列。所以它是我们在 db 上创建的序列,而不是 hibernate 生成的序列。

hibernate升级到5.1后,不再使用@SequenceGenerator中声明的sequence,而是使用hibernate_sequence,ids与已有的冲突。如果我将 GenerationType 更改为 SEQUENCE:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "applicationEventLog")

它确实使用了规定的序列,但 SEQUENCE 不适用于 MySql。

有没有办法实现旧的行为:使用 GenerationType.AUTO 但使用 @SequenceGenerator 中指定的名称的序列?

最佳答案

AUTO 表示让 JPA 提供者选择它使用的生成器类型。 SEQUENCE 强制它使用 SEQUENCE。根据 JPA 规范。如果您想要一个特定的生成器,那么您应该指定它,而不是依赖 JPA 提供程序来实现您真正想要的同一生成器

关于mysql - 从 Hibernate 3.6 迁移到 5.1 时 GenerationType.AUTO + @SequenceGenerator 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37792898/

相关文章:

mysql - SQL - 将特定 ID 列表插入到表中

java - 如何覆盖 FetchType.EAGER 以在运行时变得懒惰

.net - 如何在 .NET MySqlCommand 中使用 MySql 用户定义变量?

php - 在 PHP 中使用订阅选项将日历公开为 iCal

mysql - 如何在 Flyway 测试扩展中强制使用方言?

oracle - ORA-12154 : TNS:could not resolve the connect identifier specified

PHP 分页未按预期工作

oracle - 使用 MAX() 在提交物化 View 上可刷新

java - Gilead 替代品将 GWT 和 Hibernate 粘合在一起

java - Hibernate Search、Lucene 或任何其他替代方案?