在 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/