【发布时间】:2016-09-09 14:35:49
【问题描述】:
我正在尝试在 Oracle JPA 中使用定义的序列生成,以及像这样的 GenerationType.AUTO:
@Id
@SequenceGenerator(name = "MY_GEN_NAME", sequenceName = "MY_SQ_NAME")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_GEN_NAME")
@Column(name = "ID", nullable = false)
private Long id;
运行休眠验证后会抛出错误:
架构验证:缺少序列 [hibernate_sequence]
我猜,它忽略了我的MY_GEN_NAME 并试图使用该全局序列来生成 id。
当我切换到GenerationType.SEQUENCE 时,它使用SequenceHiLoGenerator 并且工作正常。
为什么会发生这种情况,是否可以让GenerationType.AUTO 使用给定的 Oracle 序列(可以切换到其他数据库)?
【问题讨论】:
-
我认为oracle没有这个功能。没有“真正的”自动增量功能。你必须使用一个序列。
-
等等。我认为您没有正确理解我的问题。我不想使用“自动增量”。我想使用我自己定义的序列和
GenerationType.AUTO。假设我只读取了创建序列的 Oracle DB,但在实现中我必须准备好切换到 MySQL(这就是为什么AUTO,而不是SEQUENCE)。但是,当我使用AUTO时 - 即使我告诉 JPA 使用什么序列,它仍然会寻找或尝试创建该全局hibernate_sequence。