Из спящего режима ссылка:
По умолчанию Hibernate3 использует выборку с отложенным выбором для коллекций и выборку с отложенным прокси для однозначных ассоциаций. Эти значения по умолчанию имеют смысл для большинства ассоциаций в большинстве приложений.
Если вы установите hibernate.default_batch_fetch_size, Hibernate будет использовать оптимизацию пакетной выборки для отложенной выборки. Эту оптимизацию также можно включить на более детальном уровне.
Обратите внимание, что доступ к ленивым ассоциациям вне контекста открытого сеанса Hibernate приведет к исключению. Например:
s = sessions.openSession();
Transaction tx = s.beginTransaction();
User u = (User) s.createQuery("from User u where u.name=:userName")
.setString("userName", userName).uniqueResult();
Map permissions = u.getPermissions();
tx.commit();
s.close();
Integer accessLevel = (Integer) permissions.get("accounts"); // Error!
Поскольку коллекция разрешений не была инициализирована при закрытии сеанса, коллекция не сможет загрузить свое состояние. Hibernate не поддерживает отложенную инициализацию для отдельных объектов. Это можно исправить, переместив код, который читает из коллекции, непосредственно перед фиксацией транзакции.
Кроме того, вы можете использовать не ленивую коллекцию или ассоциацию, указав lazy = "false" для отображения ассоциации. Однако предполагается, что ленивая инициализация будет использоваться почти для всех коллекций и ассоциаций. Если вы определите слишком много не ленивых ассоциаций в вашей объектной модели, Hibernate будет извлекать всю базу данных в память при каждой транзакции.
С другой стороны, вы можете использовать извлечение соединения, которое по своей природе не лениво, вместо выбора извлечения в конкретной транзакции. Теперь мы объясним, как настроить стратегию извлечения. В Hibernate3 механизмы выбора стратегии выборки идентичны для однозначных ассоциаций и коллекций.
Таким образом, вы должны закрыть сеанс после доступа к коллекции!
Вместо:
service.addPerson(person);
testProject.getPersons().add(person);
Я думаю, вы должны иметь:
testProject.getPersons().add(person);
service.addPerson(person);