2013-04-16 145 views
1

我正在使用IBM DB2 v9.1并希望将所有数据库导出到xml文件,并在需要时将其导回。我的数据库中有9个表格。我正在使用java and hibernate。到目前为止,我所做的是:通过hibernate获取所有数据并填充POJO对象,然后将对象导出到xml文件。现在为了导入,我需要首先删除所有现有数据库,然后将xml文件数据导入数据库。从xml导入数据库

问题出在主键(ids)。一旦id从DB2中删除,那么数据将无法使用该ID保存,并且会为其分配新的ID。这扰乱了外键关系。什么是最好的解决方案?

回答

0

导入文件后,所有的关系将被映射到检查其相互关系。新对象将在映射关系后创建,并且它们将使用新ID保存在数据库中,因为DB2不会将数据保存在旧的已删除ID上并将其保存到新ID中。

0

什么你所有的数据库意思?所有数据?甚至是DDL?

我认为您正在导出所有数据,并且您将创建的表格重新填充导出的数据。

问题是约束和生成的值。有一篇关于生成值的好文章:http://www.ibm.com/developerworks/data/library/techarticle/0205pilaka/0205pilaka2.html

对于引用约束,最好是在导入前删除/停用它们,然后导入数据,最后重新创建/激活参考约束。

在这里,一个好的存储过程来启用/禁用约束:http://www.dzone.com/snippets/db2-enabledisable-constraints

+0

丢表可能工作,但我不得不放弃表工作。 –

+0

我没有说放弃表格,我的意思是放弃限制或停用它们。 – AngocA

0

也许MERGE statement能来拯救你。如果已经有一行具有匹配的id,它会让你更新行。如果没有匹配ID的行,那么它会让你插入它。

那么这个问题可能会变成:在创建XML文件时,是否真的需要从DB2中删除行?

+0

我试过但合并没有给我结果。删除后,我使用merge()保存该实体,但使用新ID保存该实体,尽管在调用merge()之前ID设置为旧值。 –

+0

这听起来像你可能有身份字段,它是用GENERATE ALWAYS而不是GENERATE BY DEFAULT定义的。你可以或者你的DBA改变这些定义吗? – WarrenT