На ум приходят две специфические для JPA причины:
В соответствии со спецификацией JPA EntityManager не гарантирует многопоточность. Следовательно, портативные приложения JPA могут использовать EM только в одном потоке одновременно. Фракция создания EM локального метода и его закрытия до того, как он выйдет из области видимости, поощряет ограничение стека ссылками EM.
EM, использующий «расширенный» контекст постоянства Lifetime поддерживает единый контекст постоянства на протяжении всего своего существования. Это означает, что сущности перестают автоматически отключаться на commit()
. Вместо этого они должны быть отсоединены вручную, иначе EM остается ответственным за их отслеживание.
Этот вопрос действительно является специфической для JPA версией старого вопроса "когда собирать объекты". Это сложный вопрос, но ответ, вероятно, "редко".
Это старое сообщение developerWorks , написанное экспертом по параллелизму Java Брайаном Гетцем, объясняет эту мысль Суть: пулы имеют смысл для дорогостоящих объектов, таких как соединения с базой данных. Но для кратковременных, небольших и быстро инициализируемых объектов, таких как EntityManager, объединение в пул или некоторая другая форма долговременного сохранения ссылок является трудной задачей.
Но это общий вопрос, поэтому обязательно должны быть исключения. Возможно приложение простое или однопоточное. Тогда эти опасения по поводу безопасности потоков становятся спорными.