Firstly, you can control Hibernate fetch strategy, for example in the mapping you can specify fetch="join"
http://www.hibernate.org/hib_docs/v3/re ... -outerjoin
Note: in 3.0.5 fetch=”join” has no effect on retrieving object as a part of HQL select, but works properly when we ask session for the object, i.e. session.get( ObjectClass.class, id );
Secondly: getting all the objects with JOIN might actually cause performance to deteriorate. It may happen when linked tables have small number of records, in this case it is cheaper to get the objects from session or second level cache than transfer them from DB as a result of a big jojn.