我正在尝试编写一个SQL脚本来将数据从一些旧表迁移到一个新表。新表的主键(id)由hibernate管理,旧表的主键也是如此。我不知道如何使用纯SQL为新表分配ids,所以我要做的就是从旧表中获取ids。迁移脚本按预期工作。
在某些情况下,我的应用程序试图使用Hibernate将数据插入到新表中,但我得到了违反主键约束的异常。我怀疑这是因为hibernate分配的键与我在迁移旧数据时给出的键冲突。顺便说一句,hibernate被配置为为每个表分配唯一的主键。
我做错了什么?我该如何解决这个问题?
谢谢
发布于 2012-07-16 16:45:21
如果对主键列(例如mysql、MSSQL)使用具有自动增量的数据库,则必须将现有ids的自动增量值设置为最大值(在迁移之后)。如果使用sequence生成If (例如oracle、postgree),则必须将当前sequence值从现有If更改为max (在迁移之后)。
发布于 2012-07-16 20:43:31
好的-事实证明,当使用@GeneratedValue(策略= GenerationType.TABLE)和Hibernate时,我们有一个hibernate_sequences表,它跟踪我的数据库中每个表的下一个id。因此,我所要做的就是更新这个表并正确设置下一个id --就像前面所说的那样。
谢谢!
https://stackoverflow.com/questions/11500434
复制相似问题