#hibernate #spring #jpa #jboss
#переход в спящий режим #spring #jpa #jboss
Вопрос:
Я искал документацию о том, как настроить spring LocalContainerEntityManagerFactory, где он может использовать несколько модулей сохранения из persistence.xml. Я хочу использовать источник данных jndi. Также, если возможно, я хотел бы использовать фабрику объектов, управляемую сервером, вместо localcontainerentitymanagerfactory с использованием
<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/pu1"/>
Может ли кто-нибудь направить меня в правильном направлении относительно этой конфигурации? Также я хочу внедрить entitymanager в свой класс dao, используя @PersistenceContext
Ответ №1:
Я не думаю, что возможно делать то, что вы хотите. Каждый EntityManager привязан к одному (и только одному) модулю сохранения, поэтому, если вы хотите использовать N модулей сохранения, вам нужно создать экземпляр N EntityManagerFactory.
«Проблема» этого заключается в том, что тогда вам нужно будет комментировать каждое использование EntityManager с помощью @PersistenceContext и указывать, какой менеджер сущностей вы хотите использовать.
Комментарии:
1. Я думаю, что я неправильно задал вопрос. Да, я согласен с вами, что мы должны определить несколько EMF в контексте spring и аннотировать dao с помощью @PersistenceContext(имя_элемента=»pu1″) и так далее. Но в spring есть 3 разных способа создания EMF. Один из них — localContainerEMFbean, а другой — j2ee-jndi, где сервер предоставит модуль сохранения.
2. Моя проблема в том, что когда я использую spring со вторым вариантом, где я просто хочу захватить PU с помощью JNDI и использовать @PersistenceContext с UnitName, spring не находит is и жалуется на это. Вот простой код, который я использую для тестирования
3. <jee:jndi-lookup id=»emf1″, jndi-name=»единицы сохранения/ pu1″/>
4. <jee:jndi-lookup id=»emf2″, jndi-name=»единицы сохранения/ pu2″/>
5. У меня также есть два PU, объявленных в моем persistence.xml с именем pu1 и pu2 оба являются JTA и используют источник данных jndi.