0
我想用懶惰的多對一關聯來運行條件查詢。這些關聯在HBM中設置爲lazy="false"
。這是因爲我們急切地使用它的90%的項目。如何在HBM中定義lazy = false時使用setFetchMode(Lazy)運行Nhibernate ICriteria查詢?
但有幾個'大'的查詢應該運行爲lazy="proxy"
。
HBM:
<many-to-one name="DestinationElement" class="X" column="DstElemId" not-null="true" unique="false" cascade="save-update" outer-join="auto" fetch="select" lazy="false" index="IDX_Ass_DestElem">
標準設置:
criteria.SetFetchMode("DestinationElement", FetchMode.Lazy);
它的工作原理相反的方向,但不是這樣。它熱切地獲取。
LOC是20K +,它會是一個巨大的重構,以相反的方式做。
我該如何強制這種方式只在需要時才能懶惰地取回,並且在其他時間急切地取出?
提前致謝!
謝謝。在此期間,我意識到這是無法完成的。所以,我們將更改代碼。 – user461828 2010-09-30 17:16:34
有這個選擇會很好,但據我所知,這是一個設計問題,爲什麼我們急切地使用了一些關聯。這是因爲我們需要急切地獲取屬性作爲真實對象:我們需要投射,但它被當作真實對象的父對象,因此不可能投射。例如。我們有一位患者,擁有屬於治療師的人物。實際上,這個人永遠是一個繼承自Person的Doctor。所以,當我懶得取人時,我不能將它投給Doctor,因爲只有「人物部分」可用。 這是因爲有錯誤的'等於'方法 – user461828 2010-09-30 17:20:51
因此,讓治療師懶惰地成爲人,它不能投給醫生。但是,如果我們設置財產以獲取它,它就是一位醫生。這就是我們爲什麼這樣使用它的原因。但是當取多個病人時,所有的醫生也都被抓取了。在這種情況下,它變得很慢。我知道它也可以加入,但這種方式的查詢大小爲100K +,而Oracle無法處理它。所以,這是一個複雜的情況,需要立即快速和骯髒的解決方案。但是,正如我們所知,qad解決方案總是被回擊:D – user461828 2010-09-30 17:31:39