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 mvc+spring + hibernate 整合
org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 Spring + Hibernate + HSQLDB