【问题标题】:How does the hibernate GenerationType.AUTO work in Oracle?休眠 GenerationType.AUTO 如何在 Oracle 中工作?
【发布时间】:2015-09-13 01:53:54
【问题描述】:

使用 oracle/JPA 休眠。我以以下方式导入了在学生表下具有值的模式。这是一个例子

100
85
80
70
1

我有以下代码:

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

现在当插入一个新学生时,它不会插入最大值,即 101 (max + 1)。但是在两者之间插入一些可用的值 像90。我不确定它怎么可能?

Hibernate 是否在内部创建一些数据库序列并使用然后使用最后创建的值加 1

【问题讨论】:

标签: java oracle hibernate jpa auto-generate


【解决方案1】:

对于 oracle,是的,它会创建一个序列(可能命名为 hibernate_sequence)。

如果表中有现有值,您可能希望更新序列以提供比现有值更大的 id(否则您很快就会遇到主键错误)。

【讨论】:

  • 我删除了 hibernate_sequence。但是我怎样才能再次创建它。我希望它应该在应用服务器重新启动时自动创建
  • 当我说“更新序列”时你为什么放弃它。
  • 可能,请查看您的 oracle 手册以了解如何更改序列。
  • @Kayaman 我有@Id @Basic(optional = false) @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; 我得到 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在。错误代码:942。调用:UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?。请帮忙。
  • @Kayaman 我也尝试过使用@GeneratedValue,但我得到了与之前相同的结果。我使用 Eclipse 作为 JPA 持久性提供程序。
猜你喜欢
  • 2011-03-05
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多