Hibernate uses object proxies for lazy loading. In short, they are derived objects from your mapped classes which are instantiated from hibernate. When you access your object through the proxy hibernate makes sure that the necessary data gets loaded. If you do not use castle, you should use
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx