Методы получения и установки ООП не являются, и чаще всего просто удваивают размер кода, но это бесполезно.
что касается книг: паттерны проектирования (Gamma, Vlissides, Johnson, Helm), книги Фаулера (рефакторинг, шаблоны архитектуры корпоративных приложений), книги Бека (разработка через тестирование на примере, шаблоны реализации) и т. Д.
Вы можете попробовать вызвать Session.clear, чтобы принудительно очистить кеш первого уровня. Обязательно сначала вызовите Session.flush, чтобы записать любые ожидающие изменения в базу данных. Если это «решит» проблему, то я подозреваю, что что-то все еще содержит ссылку на сеанс, предотвращая сборку мусора для объектов в кеше. Возможно, вам потребуется получить дамп кучи вашей программы, чтобы отследить утечку.
Hibernate также имеет дополнительный кэш второго уровня, который может быть задействован. Я согласен с Робом, самый простой способ узнать это - посмотреть, что еще осталось в памяти после окончания сеанса.
В настоящее время мой любимый инструмент для этого - YourKit , который является коммерческим и не совсем дешевым. Раньше они предлагали (и все еще могут предлагать) вариант личной лицензии, который был очень недорогим (99 долларов IIRC). Я использовал YourKit именно для этой задачи при устранении проблем с использованием кучи в Alfresco ECM. Есть и другие доступные инструменты (например, CodeGear JGears), которые, как я понимаю, также работают очень хорошо.
Вы можете рассмотреть возможность использования продукта в режиме оценки - если это обнаружит вашу проблему, он может заработать;)