2012-07-16 122 views
3

我想写一个SQL脚本来将数据从一些旧表迁移到新的表。 新表主键(id)由hibernate管理,因此是旧表的主键。 我不知道如何使用普通SQL为新表分配id,所以我正在做的是从旧表中取出id。 迁移脚本按预期工作。休眠主键约束冲突

在某些情况下,我的应用程序尝试使用Hibernate将数据插入到新表中,并且我得到主键约束违例异常。我怀疑这是因为休眠分配密钥与我在迁移旧数据时给予的密钥冲突。 顺便说一句 - 休眠配置为每个表分配唯一的主键。

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

感谢

+0

你是否需要从旧桌子的ID?如果你有新的ID,它会破坏一些东西吗? – Tomer 2012-07-16 08:22:24

+0

我不必使用旧的ID如果有帮助.. – 2012-07-16 11:59:56

回答

1

如果使用带有自动增量数据库主(例如MySQL和MSSQL),你必须设置从现有的IDS自动增量值MAX(迁移之后)键列。 如果使用序列生成id(例如oracle,postgree),则必须将当前序列值从现有id(迁移后)更改为max。

+0

谢谢 - 这可能会有所帮助,但我没有使用(至少不以我知道的方式)数据库ID生成器。 我以下列方式使用hibernate注释: @Id @GeneratedValue(strategy = GenerationType.TABLE) long id; 我不确定它是如何工作的 – 2012-07-16 12:00:34

0

好吧 - 事实证明,在Hibernate中使用@GeneratedValue(strategy = GenerationType.TABLE)时,我们有hibernate_sequences表,它跟踪我数据库中每个表的下一个id。所以我所要做的就是更新这个表格并正确设置下一个ID--就像之前所说的那样。

谢谢!