#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 в ваши классы сохраняемости всякий раз, когда это требуется.