2015-07-10 99 views
0

我必須設計一個表來存儲一些遠程數據。我通過Web服務獲得的數據有一個候選鍵,兩列的組合,但我看到很少的帖子,他們不鼓勵在hibernate中使用複合鍵,而是推薦使用代理鍵。如果我使用組合鍵設計表,那麼我可以直接更新數據,但如果我使用代理鍵,那麼在更新之前我必須首先獲取主鍵。我的問題是我應該使用哪一個組合鍵或代理鍵?休眠組合鍵或代理鍵

回答

1

說不復合鍵becasue ...

  • 他們是低效(取決於數據庫)
  • 使用繁瑣的參數,而不只是一個
  • 容易
  • 更多數量錯誤
  • 如果我們有多個列作爲複合鍵,可能會導致數據重複聯繫

因此建議使用代理鍵。雖然它有其自身的缺點

  • 性能問題
  • 容易出錯
  • 複製

與休眠的Java持久性陳述參考:

更多有經驗的Hibernate用戶獨佔使用saveOrUpdate();它更容易讓Hibernate決定什麼是新的和什麼是舊的,尤其是在具有混合狀態的更復雜的對象網絡中。只有 獨佔saveOrUpdate()的缺點(不是很嚴重)是 ,它有時無法猜測實例是舊的還是新的 而不在數據庫中觸發SELECT(例如,當類是 映射到自然組合鍵和無版本或時間戳 屬性。

限制的一些表現形式可以找到here

因此,在使用自然鍵時,如果使用自然鍵,並且使用替代鍵時最好使用它們。

+0

我必須更新超過一百萬條記錄,如果我使用代理鍵,那麼我必須對所有記錄進行選擇和更新。有什麼方法可以提高性能? – wolverine

+0

更新一百萬條記錄聽起來像你可能想要這樣做,而不休眠。 –