Here is my criteria:
public Commercial findManager(Entity entity) {
    DetachedCriteria criteria2 = DetachedCriteria.forClass(Role.class);
    criteria2.createAlias("workStation", "workStation");
    criteria2.createAlias("workStation.entity", "entity");
    criteria2.add(Restrictions.eq("entity.id", entity.getId()));
    criteria2.createAlias("commercial", "commercial", CriteriaSpecification.LEFT_JOIN);
    criteria2.setFetchMode("commercial", FetchMode.JOIN);
    criteria2.createAlias("commercial.function", "function");
    criteria2.add(Restrictions.eq("function.name", "MANAGER"));
    criteria2.setProjection(Projections.property("commercial"));
    Commercial commercial = (Commercial) getHibernateTemplate().findByCriteria(criteria2).get(0);
    return commercial;
}
This criteria works as intended except that it returns a proxy. Since I am going to query a lot of properties on that proxy I want to force hibernate to load that object in the same query, but even with fetchmode in JOIN mode it does not seem to work. What is wrong?
I use hibernate 3.3.2 and spring 2.5

