簡體   English   中英

如何改善休眠查詢?

[英]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 FETCHLEFT JOIN FETCH

FROM A a JOIN FETCH a.B WHERE a.id IN (:ids)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM