java如何防止从一个数据库导出到另一个数据库时“自动编号”字段发生冲突?
假设我有一个通过hibernate持久化/加载的Person
类:
class
{
int PersonId;
String Name;
}
PersonId
是hibernate在保存Person
时生成的“自动编号”
现在让我们假设我在一个测试数据库中做了一堆Person
,现在我想复制到生产数据库中
但是,在生产数据库中,已经有一个名为“John”的PersonId
1
在测试数据库中,PersonId
1是“William”
如何将“William”作为PersonId
=2导入生产数据库
请注意,在测试数据库中使用PersonId
的还有其他表,如地址表等。因此,在保持PersonId
的完整性的同时,还需要导出/导入所有这些表
编辑: 我认为一种可能性是,测试数据库应该配置为从90000开始使用autonumber,而我们知道生产数据库的PersonId值小于10000。所以我们可以这样“分割”它。但如果用户忘记设置,现在只能使用从1开始的自动编号,该怎么办?用户不应该为了更改我的s/w理想情况下应该做的id而重复所有的工作
# 1 楼答案
最好编写一个脚本,将适当的Hibernate对象添加到生产数据库中,而不是尝试使用测试数据库中的SQL转储。您的脚本可能会执行以下操作。列出所有人的名单。为列表中的每个人创建一个新对象,设置必要的字段,如姓名、年龄等。将该对象保存到数据库中。插入人员后,添加与每个人员关联的任何对象,例如员工信息
# 2 楼答案
List
中的所有Person
对象ObjectOutputStream
(或apache commons langSerializationUtils
)将该列表序列化到硬盘List
(同样,使用ObjectInputStream
或SerializationUtils
)迭代保存每个人,但在此之前将id设置为0:
最好将上述功能放在一个单独的程序中,您可以在需要时运行