2010-01-07 32 views
1

我使用Spring/Hibernate Dao來保存數據庫中的對象。現在我不得不將我的數據庫備份到我的應用程序中。現在,當我嘗試讀取我的備份時,我的應用程序崩潰了。現在我發現這個崩潰的問題。它是Hibernate,當我想保存時它爲我的Object自動創建一個新的ID。Spring/Hibernate的數據庫備份問題GenerationType.AUTO

例如我在備份文件中將我的對象與Id 4一起保存。

現在我讀了備份文件。從舊東西清理我的數據庫。將這個對象保存回db。現在我的對象ID是例如5.但它必須是4.我怎樣才能防止hybernate自動生成我的id值?

我應該寫一個額外的JDBCDao導入?

這裏是我的ID模型屬性

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

感謝您的幫助和任何藉口我的英語不好。

回答

2

四個選項來我的腦海:

  • 使用數據庫實用程序(比如在MySQL中的情況下 - 使用mysqldump)進行備份,並通過數據庫工具再次還原它,沒有冬眠因爲
  • 上述似乎不是一個選項現在,您可以基於您的備份(顯示您的備份的格式)生成SQL查詢,並作爲批量執行它們對dtabase(再次沒有休眠)
  • 如果你不想使用SQL選項並希望在hiber中完成nate,迭代你的對象並一個接一個地保存它們。保存後立即使用正確的ID更新對象(使用.persist()或使用HQL)。
  • 您可以在導入時臨時刪除GeneratedValue註釋。

這一切都表示,我覺得(再次,這取決於你的格式),它不應該的問題那麼多的ID是什麼,如果參照完整性是完好的。