我遇到了頁面加載數據的問題。 rich:datatable用於顯示公告列表。HIbernate與收藏緩慢加載數據
公告類包括設置AnnouncedLot類和映射它被指定爲
<set cascade="all,delete-orphan" lazy="false" name="lots" table="ad_lot">
<key column="lotId"/>
<many-to-many class="AnnouncedLot" column="anlotId"/>
</set>
AnnouncedLot類映射
<class name="AnnouncedLot" table="announcedLot">
<id name="id" type="java.lang.Long" unsaved-value="-1">
<generator class="native"/>
</id>
<property name="idValue" not-null="false" unique="true"/>
<property name="databaseId" not-null="false" unique="true"/>
<property length="4047" name="title"/>
<property length="4047" name="description"/>
<property length="4047" name="source"/>
<property length="65534" name="adText"/>
<property name="sum"/>
</class>
目前的大約有150萬的公告數據庫和3,5百萬手。一個公告可以有1個甚至100個批次。
頁面只加載30個公告查詢的第一個結果。它在數據庫中沒有批次時快速加載,但有很多時間可能需要大約1.5分鐘。
我試圖改變懶惰爲真和谷歌這個問題,但沒有找到太多。有人能幫忙嗎?
更新:
檢查哪些查詢需要大量的時間後,我發現該行計數查詢的原因。由於缺省過濾器參數,查詢包含lots.sum條件。我已經更換過濾器,因此不必使用該設置,性能得到了改善。
謝謝大家的幫助。
您是否嘗試過使用數據庫跟蹤來查看實際運行的查詢? –
是的,只是發現通知總數的計數查詢需要很長時間,並且會將數據複製到tmp表中。而這個由hibernate生成的查詢包含左連接到多個表。 –
行計數實現爲'criteria.setProjection(Projections.rowCount());'不知道它可能有什麼問題。 –