2013-10-26 89 views
0

我有很多的時間場景,我只想要訪問只有一/二/或一些沒有列的,我們正在使用休眠,所以我想知道這是性能或者休眠findById或SQL查詢

1更好)通過提取findById hibernate的方法,對我來說非常方便,因爲我必須調用它,但是我認爲它的性能不好,因爲它會獲取所有列,而我只需要一些列。

2)或每個是乏味的時間來創建我的查詢,但它會在更好的性能

所以我想關於我應該怎麼用的建議嗎?

回答

0

要更具體地回答,如果您包含代碼段,這將有所幫助。一般來說,findById是一種方便的方法,它會導致查詢與你自己寫的內容非常相似。因此,自己編寫查詢並僅返回所需的列(構造函數表達式很有用)在性能方面會更好。我會問的問題是,改進的性能是否值得更復雜的代碼?您可以隨時優化您的查詢。

+0

據我所知'findById'會返回所有列的權利? – commit

+0

我仍然不是100%確定您所指的是哪個findById方法,但是,是的,像findById這樣的方法會返回整個實體,其中包括該實體的所有字段。如果實體具有其他實體作爲字段(並且它們未被延遲加載),則其他實體也將被加載。 – trf

0

它完全取決於正在加載的實體。如果實體是一個,有很多關係,並且所有你需要的是根實體中的幾個字段,那麼當Hibernate用JOINs產生查詢來加載可能非常昂貴的實體時,肯定值得編寫你自己的查詢。這裏要考慮的另一件事是,您可以始終處理使用LAZYEAGER加載的字段,但這些設置是靜態的,並且將永久應用於您的實體。
另一方面,如果實體沒有很多關係,我相信最昂貴的部分是DB和你的應用程序之間的對話時間,因此加載一些額外的字段可以忽略。