2011-12-07 30 views
0

這是我的映射文件的摘錄:NHibernate的1.x中:多到一個不延遲加載

<class name="XXX.A" 
     table="a" 
     lazy="false"> 

    <many-to-one name="B" 
        lazy="proxy" 
        access="field.camelcase" 
        cascade="none" 
        not-null="false" 
        class="XXX.B" 
        column="id_b"/> 

</class> 

但當A通過其ID加載,我看「左連接」來獲取B。如何防止這一點?

我可以補充一點,我們使用ISession.Get(...)而不是ISession.Load(...)

+0

B是B的實際實例還是它們的代理對象(它們應該根據您的映射)? –

+0

這不是一個代理。但是,B不僅有一個左連接,而且還留在了B.X,B.Y連接中! –

回答

1

如果你有<class name="XXX.B" lazy="false">那麼NHibernate不會爲它創建一個代理類。因爲所有<many-to-one class="XXX.B" lazy="proxy|true" />被忽略,因爲NH不能創建代理對象。

啓用B的LazyLoading刪除lazy="false"或設置<class lazy="true">。如果因爲不想讓每個方法都是虛擬的而禁用Lazy類,那麼也可以實現自己的Proxyclass來處理LazyLoading。