You could use a query to load the object allowing you to 'join fetch' the collections:
Code:
Project project = (Project )session.createCriteria(Project .class)
.setFetchMode("organisations", FetchMode.JOIN)
.setFetchMode("contacts", FetchMode.JOIN)
.add(Restrictions.eq("id", projectId)).uniqueResult();
The uniqueResult() call eliminates the duplicate records from the result set. "id" will be substituted by hibernate in SQL for the primary key of your project table.
Alternatively, load the object with load() then initialise the collections with Hibernate.initialize(project). This will issue subselects for the collections but might be more efficient than creating the cartesian product of project*organisations*contacts.
Mike