Когда нам нужен больше чем один EntityManager?

Я изучаю JPA и имею один вопрос:

В которых ситуациях нам нужен больше чем один EntityManager в нашем приложении?

Две ситуации, что я знаю, следующие:

  • Когда наше приложение является многопоточным приложением, и больше чем одному потоку нужна транзакция JPA потому что EntityManager не ориентировано на многопотоковое исполнение, и нам нужен тот EntityManager на поток.

  • Когда любому потоку нужны несколько параллельных транзакций, нам нужен больше чем один EntityManager в том потоке, потому что существуют непосредственные отношения между EntityManager и EntityTransaction.


Q1. Есть ли любые другие ситуации, когда нам нужен больше чем один EntityManager?

Q2. До моего понимания должен быть только один EntityManagerFactory на Единицу Persitence. Я корректен? В противном случае затем, каковы те ситуации, когда нам нужны несколько EntityManagerFactory на единицу персистентности?

18
задан Tiny 26 November 2014 в 13:47
поделиться

1 ответ

Q1: EntityManager лучше всего сравнивать со «старым добрым» Hibernate Session : единица работы (простая бизнес-действие, например, «вход в систему», «размещение заказа» и т. д.). Это не обязательно связано с одним потоком. Проблемы возникнут только в том случае, если разные потоки будут выполнять задачи БД, которые зависят друг от друга внутри одной единицы работы. Вам нужно будет выполнить их синхронно (желательно по порядку в одном потоке). Если у вас, например, есть бизнес-требование по очистке некоторых «старых журналов», когда пользователь входит в систему (что разумно не мешало бы информации друг друга), вы можете отлично выполнить это в двух отдельных потоках внутри одной единицы работы.

Q2: Вы правильно поняли. Однако вы можете создать более одного, но это не имеет никакого смысла и не дает никаких преимуществ. Это только добавит значительных накладных расходов.

11
ответ дан 30 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: