我正在尝试编写一个SQL脚本来将数据从一些旧表迁移到一个新表。 新表主键(id)由hibernate管理,因此作为旧表的主键。 我不知道如何使用纯SQL为新表分配id,所以我正在做的是从旧表中获取id。 迁移脚本按预期工作。
在某些时候,我的应用程序尝试使用Hibernate将数据插入到新表中,并且我得到主键约束违例异常。我怀疑这是因为hibernate分配的密钥与我在迁移旧数据时给出的密钥相冲突。 BTW - hibernate配置为每个表分配唯一的主键。
我做错了什么? 我该如何解决这个问题?
由于
答案 0 :(得分:2)
如果使用带有自动增量的数据库(例如mysql,MSSQL)键列,则必须将现有ID的自动增量值设置为max(迁移后)。 如果使用序列生成id(例如oracle,postgree),则必须将当前序列值从现有ID更改为max(迁移后)。
答案 1 :(得分:1)
好的 - 事实证明,当使用Hibernate的@GeneratedValue(strategy = GenerationType.TABLE)时,我们有hibernate_sequences表来跟踪我的数据库中每个表的下一个id。因此,我所要做的就是更新此表并正确设置下一个ID - 正如之前所述。
谢谢!