[英]How to improve the hibernate query?
我有兩個名為A和B的類。B的主鍵是tab_A的字段。 映射xml類似於:
<hibernate-mapping>
<class name="com.fabulous.A" table="tab_A">
<id name="id" column="id">
<generator class="assigned" />
</id>
<property name="userId" column="user_id" />
<many-to-one name="B" column="B_id"
class="com.fabulous.B" unique="true" lazy= "false" cascade="merge">
</many-to-one>
</class>
</hibernate-mapping>
還有另一個映射XML,它將類B映射到表B。我的應用程序中的查詢是:
session.createQuery("FROM A WHERE id IN (:ids)").setParameterList("ids", ids).list();
該參數是A.id的列表。 列表的大小為100;
當lazy = true時,查詢時間約為1s ,但是應用Ab時將花費大約1分鍾的時間。 實際上,總是需要B,因此我關閉了延遲加載。 查詢時間約為40s。
從休眠日志中,一個一個地休眠休眠表B的負載B,但不是一個批次。 我認為,如果我從查詢中的表A中提取所有B.id,然后在一批中查詢表B,則總時間將少於3s。
但這不是方便,任何人都可以幫忙弄清楚如何使用休眠模式改善查詢嗎?
非常感謝。
要急切地獲取查詢的某些關系,只要該關系是可選的,只需執行簡單的JOIN FETCH
或LEFT JOIN FETCH
FROM A a JOIN FETCH a.B WHERE a.id IN (:ids)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.