2011-06-04 90 views
1

我在辦公室討論是否使用Hibernate。目前我們的代碼使用純jdbc和sql語句來獲取我們需要的數據。正如你可以想象的那樣,這使得我們的代碼難以維護。我建議切換到Hibernate以使我們的代碼更好看。但是,我們的應用程序需要具有高性能(就時間和內存利用率而言)。我的同事們一直在爭論說,轉換到Hibernate會讓我們獲取不必要的數據,因此使我們的應用程序變得更慢,並消耗更多的RAM內存。休眠和資源利用

這是真的嗎?有什麼我們可以使用的技巧嗎?我在與同事的討論中可以使用哪些論據?

謝謝!

+0

我認爲你應該收集支持你的觀點的硬數據(同時也檢查潛在的失敗點),而不是進行冷水討論。對於這樣大規模的設計變革,如果你單單通過教科書進行爭論,你確實可能不會贏得人們。從這裏講述經驗。 – 2011-06-04 10:19:05

回答

5

首先,對於大多數應用程序而言,在高性能和低內存之間進行權衡。如果你同時想要,你通常必須考慮其他的折衷,例如可維護性就像您在JDBC中的應用程序一樣。

你可以說你的同事,對於所有關係的提取類型可以指定:

  • EAGER - 取當豆裝入場
  • LAZY - 獲取域的域只有當被使用

這發生在bean受實體管理器控制時。如果您遠程獲取對象,則額外的懶惰加載是不可能的。 但問題是,如果Hibernate是您的需求的解決方案,很大程度上取決於您的應用程序的性質。

如果有一個Web應用程序和巨大的對象圖,如果您使用JPA/Hibernate和例如像SEAM,因此具有實體管理器控制下的所有對象(即使在您的JSF託管的bean中)。在這裏,你不必關心什麼對象圖中的字段實際上是必需的,因此不需要在這個問題中花費任何一行代碼。

但是,如果你進行如科學或財務計算,通過自定義(以及龐大,複雜且難以維護)的SQL語句,您可以更快地獲得所需的一切。如果可能的話,我會使用JPA(以及後端Hibernate)。更簡潔的代碼對我們來說比一些微秒的更快的計算時間更重要。

+1

Thor給出了很好的答案,我只是簡單地補充說Hibernate可能需要比JDBC方法更多的內存,它可能會更慢或更快,具體取決於您的JDBC應用程序的編寫情況,並且您始終可以調整Hibernate以僅檢索您的信息請求而不是更多。 HTH – 2011-06-05 08:33:28