0

データのページ読み込みに問題があります。rich:datatableは、アナウンスのリストを表示するために使用されます。

アナウンスクラスには、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万件の発表があり、350万件のロットがあります。1つのアナウンスには1つまたは100のロットを含めることができます。

ページは、アナウンスクエリの最初の結果を30個だけロードします。データベースにロットがない場合はすぐにロードされますが、ロットがある場合は約1.5分かかる場合があります。

私は怠惰をtrueに変更し、この問題をグーグルで検索しようとしましたが、あまり見つかりませんでした。誰かがこれを手伝うことができますか?

アップデート:

どのクエリに時間がかかるかを確認したところ、行数カウントクエリが原因であることがわかりました。デフォルトのフィルターパラメータのため、クエリにlots.sum条件が含まれていました。セットを使用する必要がないようにフィルターを変更し、パフォーマンスが向上しました。

助けてくれてありがとう。

4

1 に答える 1

2

多対多の関連付けでバッチサイズ属性を使用してみてください。

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-batch

于 2012-05-29T15:35:23.317 に答える