5

我正在尝试编写一个 SQL 脚本来将数据从某个旧表迁移到新表。新表的主键(id)由hibernate管理,旧表的主键也是如此。我不知道如何使用普通 SQL 为新表分配 id,所以我正在做的是从旧表中获取 id。迁移脚本按预期工作。

在某些时候,我的应用程序尝试使用 Hibernate 将数据插入到新表中,并且我得到主键约束违规异常。我怀疑这是因为休眠分配的键与我在迁移旧数据时提供的键发生冲突。顺便说一句 - hibernate 被配置为为每个表分配唯一的主键。

我究竟做错了什么?我应该如何解决这个问题?

谢谢

4

2 回答 2

2

如果您对主要(例如 mysql、MSSQL)键列使用具有自动增量的数据库,则必须将自动增量值设置为现有 id 的最大值(迁移后)。如果您使用序列生成 id(例如 oracle、postgree),则必须将当前序列值从现有 id 更改为最大值(迁移后)。

于 2012-07-16T08:45:20.513 回答
1

好的 - 事实证明,当将 @GeneratedValue(strategy = GenerationType.TABLE) 与 Hibernate 一起使用时,我们有 hibernate_sequences 表来跟踪我的数据库中每个表的下一个 id。所以我所要做的就是更新这个表并正确设置下一个 id - 正如之前所说的。

谢谢!

于 2012-07-16T12:43:31.147 回答