Подтвердить что ты не робот

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

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

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

Две ситуации, о которых я знаю, следующие:

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

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


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

Q2. Понимаю, должно быть только одно EntityManagerFactory за группу перманентности. Я прав? Если нет, то каковы эти ситуации, когда нам нужно несколько EntityManagerFactory для каждой единицы существования?

4b9b3361

Ответ 1

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

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