【问题标题】:Spring data - JPA, missing IDsSpring 数据 - JPA,缺少 ID
【发布时间】:2015-08-17 12:02:16
【问题描述】:

我们正在使用一个spring数据项目,我们有一个mysql数据库。 最近我们注意到 USER 表上有以下内容:

id  |   name |  pass | email
=====================================
1      John      123     john@gmail.com

2      Joe      456       joe@gmail.com

3      .....

4   ....

6 ...

显然我们的数据库中缺少 id=5。

  1. 这可能是什么原因?请记住,我们正在使用@transactional 服务和 dao。

  2. spring 数据可以使用这些跳过的 id 创建新条目吗? (可能是配置?)

【问题讨论】:

  • 如果你有 5 个条目,删除 1 个然后创建其他条目并且你的 id 是自动生成的,我认为它会跳过 5
  • 我们的项目中根本没有删除。

标签: java mysql spring jpa spring-data


【解决方案1】:

当您发出insert 语句时,id 会被“保留”,但插入会一直执行到事务提交为止;如果在此之前抛出异常,则事务回滚,不执行插入,因此不使用保留的 id。所有这些都假设您使用的是自动增量。

可能还有其他原因,但这个特别是偶尔发生在我身上,虽然对我来说并不是一个真正的问题。

编辑:这在 Postgres 上发生在我身上,但我认为它也发生在 mysql 上;自从我上次使用它已经有一段时间了。

另外,您可以在 @GeneratedValues 上查看您的 JPA 提供商的文档

【讨论】:

  • 感谢您的回答,spring data 可以使用这些跳过的 id 创建新条目吗? (可能是配置?)
  • 我不这么认为,但你可以试试。您当然可以直接在 MySQL 中手动插入它们(指定一个 id 而不是使用自动增量),但我还没有通过 JPA 尝试过。
猜你喜欢
  • 1970-01-01
  • 2018-07-14
  • 2011-12-02
  • 1970-01-01
  • 2018-09-19
  • 2022-11-11
  • 2017-10-28
  • 2011-01-06
相关资源
最近更新 更多