Also remember one thing: proxy is dinamically generated class which _extends_ the class you specified as "proxy" attribute. That means if you have a class CLZ with 40 long/int/Object properties and you declare your mapping like
Code:
<class name="CLZ" ... proxy="CLZ">
When you load an object from the database, first object of class CLZ is created - it is the proxy. It will never have any of your properties initialized and it is just waiting for you to call one of its methods. When you eventually call anything (getName() for example), the proxy loads and created the real object (and this is the second object of class CLZ which gets created) and delegates method call to it. And both of these objects have 40 properties (ok, for proxy object none of them is initialized). As result, number of _loaded_ objects easily doubles if you are using proxies. These 40 properties may take alot of space if you have really many objects.
As workaround you may use interfaces - this is discusses in "11.1. Proxies for Lazy Initialization"