Spring/Hibernate GenerationType.AUTO 的数据库备份问题

Posted

技术标签:

【中文标题】Spring/Hibernate GenerationType.AUTO 的数据库备份问题【英文标题】:DB backup problem with Spring/Hibernate GenerationType.AUTO 【发布时间】:2011-01-02 11:30:26 【问题描述】:

我使用 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;

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

【问题讨论】:

【参考方案1】:

我想到了四个选项:

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

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

【讨论】:

以上是关于Spring/Hibernate GenerationType.AUTO 的数据库备份问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring+Hibernate,Autowire sessionFactory 到 hibernate DAO

Spring + Hibernate 框架

spring mvc+spring + hibernate 整合

org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 Spring + Hibernate + HSQLDB

spring mvc+spring + hibernate 整合

带有注释的 Spring + Hibernate:没有 Hibernate Session 绑定到线程