JPA & Spring - как получить общий EntityManager из весны? - PullRequest
4 голосов
/ 30 июня 2011

Я использую JPA с Hibernate на Spring 3.0.

Я определил LocalEntityManagerFactoryBean и JpaTransactionManager.У всех Daos есть EntityManager (я думаю, что общий), введенный с @PersistenceContext, но у меня есть некоторый код, где я хотел бы использовать тот же EntityManager, но получить его вручную.Как это сделать?

Когда я просто разрешаю EntityManagerFactory bean и вызываю createEntityManager, этот EntityManager отделен от того, который использует Дао (поэтому, когда я нахожу () и объект через DAO, яне может быть сохранен, используя полученный вручную EntityManager - объект отсоединен).

1 Ответ

4 голосов
/ 01 июля 2011

Есть один способ, но вы должны быть уверены, что вам это действительно нужно.Почти во всех случаях вы можете ввести менеджер сущностей.

Вот как это сделать, если не существует никакой другой опции:

EntityManagerFactory emf = obtainEntityManagerFactory(); // you mentioned you have it
EntityManagerHolder holder = TransactionSynchronizationManager.getResource(emf);
EntityManager em = holder.getEntityManager();

Вкратце - для каждой транзакции, запущенной пружиной JpaTransactionManager, сохраняется менеджер сущностей в ThreadLocal, используязавод как ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...