Сопоставить объект с его EntityManager

#java #hibernate #jpa

#java #переход в спящий режим #jpa

Вопрос:

У меня есть приложение, обрабатывающее несколько EntityManager, и я хочу сопоставить каждый объект с его EntityManager. Как я могу сопоставить эти объекты?

Один момент, который следует учитывать: у меня есть один EntityManagerFactory, и с помощью этой фабрики я создаю множество EntityManagers.Затем я создаю новый EntityManager для каждого входа пользователя в систему. Что мне нужно, так это идентифицировать объекты, связанные с каждым EntityManager.

Ответ №1:

В простейшем случае, если ваш класс аннотирован должным образом, это будет выглядеть примерно так:

 <persistence-unit name="EntityManager1" transaction-type="...">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>org.somepackage.ClassOne</class>
    <class>org.somepackage.CassTwo</class>
</persistence-unit>

<persistence-unit name="EntityManager2" transaction-type="...">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>org.somepackage.ClassThree</class>
    <class>org.somepackage.CassFour</class>
</persistence-unit>
  

Однако, если вы хотите сопоставить один и тот же класс двум EntityManagers, указывающим на разные базы данных и имеющим разные имена таблиц / столбцов, то аннотации не помогут. Если это класс, вам придется сопоставить по крайней мере таблицу, используя xml (и, возможно, вы захотите сопоставить другие, используя аннотации). сопоставления xml переопределяют аннотации.

У нас был похожий сценарий, когда нам приходилось сопоставлять одни и те же объекты с двумя разными схемами. Мы сопоставили один и тот же объект двум разным таблицам, используя два xml вместо сопоставления одной с аннотациями, а другой с xml, чтобы избежать каких-либо путаниц и / или двусмысленностей.

Комментарии:

1. Извините, если я не задал вам свой вопрос. У меня есть один EntityManagerFactory, и с помощью этой фабрики я создаю множество EntityManagers. Затем я создаю новый EntityManager для каждого входа пользователя в систему. Что мне нужно, так это идентифицировать объекты, связанные с каждым EntityManager

2. Вам не нужно создавать EntityManager для каждого пользователя, входящего в вашу систему, а затем отслеживать EntityManagers. Лучший способ справиться с этим — использовать Spring для внедрения EntityManager в ваши классы сохраняемости всякий раз, когда это требуется.