NHibernate 1.x:不延迟加载多对一 [英] NHibernate 1.x : many-to-one not lazily loaded

查看:69
本文介绍了NHibernate 1.x:不延迟加载多对一的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的映射文件的摘录:

This is extract of my mapping file:

<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.如何预防呢?

But when A is loaded by its ID, I see "left join" to fetch B. How to prevent this?

我可以补充一点,我们使用的是ISession.Get(...)而不是ISession.Load(...).

I may add that we use ISession.Get(...) and not ISession.Load(...).

推荐答案

如果您拥有<class name="XXX.B" lazy="false">,则NHibernate不会为其创建代理类.因此,所有<many-to-one class="XXX.B" lazy="proxy|true" />都将被忽略,因为NH无法创建代理对象.

if you have <class name="XXX.B" lazy="false"> then NHibernate does not create a proxy class for it. Because of that all <many-to-one class="XXX.B" lazy="proxy|true" /> are ignored because NH can not create proxy objects.

要启用B的延迟加载,请删除lazy="false"或设置<class lazy="true">.如果您因为不想使每个方法都成为虚拟方法而对类禁用Lazy,则还可以实现自己的Proxyclass来处理LazyLoading

To enable LazyLoading of B remove lazy="false" or set <class lazy="true">. If you disabled Lazy for classes because you dont want to make every method virtual you can also implement your own Proxyclass to handle the LazyLoading

这篇关于NHibernate 1.x:不延迟加载多对一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆