Java HIbernate使用集合缓慢加载数据

Java HIbernate使用集合缓慢加载数据,java,hibernate,spring-webflow,Java,Hibernate,Spring Webflow,我在页面加载数据时遇到问题。rich:datatable用于显示公告列表 Announcement类包括一组AnnouncedLot类,在映射中它被指定为 <set cascade="all,delete-orphan" lazy="false" name="lots" table="ad_lot"> <key column="lotId"/> <many-to-many class="AnnouncedLot" column="anlotId"/> <

我在页面加载数据时遇到问题。rich:datatable用于显示公告列表

Announcement类包括一组AnnouncedLot类,在映射中它被指定为

<set cascade="all,delete-orphan" lazy="false" name="lots" table="ad_lot">
<key column="lotId"/>
<many-to-many class="AnnouncedLot" column="anlotId"/>
</set>

已发布Lot类映射

<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个甚至100个批次

页面仅加载公告查询的30个第一个结果。当数据库中没有批次时,它的加载速度很快,但对于批次,它可能需要大约1,5分钟

我曾试图将“懒惰”改为“真实”,并用谷歌搜索这个问题,但没有发现太多。有人能帮忙吗

更新:

在检查什么查询花费了很多时间之后,我发现行计数查询是原因。由于默认筛选参数,查询包含lots.sum条件。我已经改变了过滤器,所以它不必使用该设置,性能也得到了改善


谢谢大家的帮助。

尝试在多对多关联上使用“批量大小”属性


您是否尝试过数据库跟踪以查看实际运行的查询?是的,刚刚发现通知总数的计数查询需要很长时间,并且它挂起了将数据复制到tmp表的过程。这个由hibernate生成的查询包含lots表的左连接不知道有什么问题。谢谢你的回答。我试过了,但还是慢。在公告类映射中我没有注意到。好像是出了问题。已检查mysql服务器状态,似乎从isdb.announcement发送查询数据“选择计数(*)作为y0”。此左外部连接isdb.tender\u announces此上的1需要整整2分钟。