2017-03-07 63 views
0

假設我使用僞代碼中的某個實體:Article { id, author, text, date },並且所有屬性都被懶惰地初始化。我有存儲庫方法:MVC中Hibernate惰性屬性初始化的最佳實踐?

@Transactional 
Article loadArticle(int id) { 
    return articeRepository.find(id); 
} 

它由不同的控制器使用。 PreviewController要求authordateViewController要求textdate。 我應該通過布爾參數initAuthor, initText, initDateloadArticle()方法來調用Hibernate.initialize()那裏的每個屬性?或者我應該將@Transactional移動到控制器的方法?處理延遲初始化的最佳實踐是什麼?

回答

2

如果你的目標是擁有一套高性能的數據訪問層,那麼你應該在你的心中一兩件事:每個用例是不同的因此需要不同類型的數據。

我想提出的是,你想爲不同的使用情況提供不同的方法,只取得它需要的數據。

有多種方法可以做到這一點:

  1. 抓取與實體關係的抓取連接
  2. 創建只讀預測

我更喜歡後者,因爲它清楚地表明,這是用於顯示數據而不是修改它。

對於突起,Spring Data JPA可以幫助,因爲它具有用於它的一個外的現成的溶液,其基本上限定了一個接口。

如果您使用Hibernate.initialize()或任何其他方式來觸發加載實體關係,實際上您將觸發數據庫查詢。如果你考慮讓我們說100個實體,那就意味着你將執行101個查詢。使用抓取或只讀投影。