Использование модуля множественной сохраняемости с предоставленным сервером источником данных с Spring и JPA

#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.