2

我使用 Spring/Hibernate Dao 将我的对象保存在数据库中。现在我必须备份我的应用程序中的所有数据库。现在,当我尝试回读备份时,我的应用程序崩溃了。现在我发现了这个崩溃的问题。它是 Hibernate,当我想保存时,它会自动为我的对象创建一个新 ID。

例如,我在备份文件中保存了 ID 为 4 的对象 a。

现在我阅读了备份文件。从旧东西中清理我的数据库。将此对象保存回 db。现在我的对象 id 是例如 5。但它必须是 4。如何防止 hybernate 自动生成我的 id 值?

我应该写一个额外的 JDBCDao 来导入吗?

这是我的 id 模型属性

@ID  
 @Column(name="ID")   
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Long id;

感谢您帮助和原谅我糟糕的英语。

4

1 回答 1

3

我想到了四个选项:

  • 使用数据库实用程序进行备份(例如,在 mysql 的情况下 - 使用 mysqldump)并通过数据库实用程序再次恢复它,无需休眠
  • 由于上面现在似乎不是一个选项,您可以根据您的备份生成 SQL 查询(向我们展示您的备份格式)并将它们作为批处理对数据库执行(再次没有休眠)
  • 如果您不想使用 SQL 选项并想在休眠中执行此操作,请迭代您的对象并一一保存。保存后立即使用正确的 ID 更新对象(使用.persist()或使用 HQL)。
  • 您可以在导入时暂时删除GeneratedValue注释。

综上所述,我认为(同样,取决于您的格式)如果参照完整性完好无损,ID 是什么并不重要。

于 2010-01-07T12:46:22.713 回答