Проверьте два PersistenceContexts на равенство - PullRequest
2 голосов
/ 10 ноября 2011

Есть ли способ проверить, представляют ли два экземпляра EntityManager один и тот же PersistenceContext?

Контейнер может использовать прокси для реализации EntityManager, поэтому я не думаю, что проверкассылка на внедренный EntityManager и сравнение его (другими словами, выполнение сравнения "==") достаточно, чтобы сказать, что он представляет тот же PersistenceContext, верно?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Я отладил сценарий с двумя менеджерами сущностей с помощью @PersistenceContext

  • Когда вводится постоянный контекст с той же единицей, сравнение entityManager.getDelegate(), которое возвращает базовый объект, специфичный для поставщика, одинаково &оба указывают на одну и ту же фабрику менеджера сущностей.

  • При разных единицах измерения полученные делегаты и фабрика менеджера сущностей были разными.

Далееможет ссылаться на этот пост.

Примечание: используемая среда - Java EE 5, было несколько других методов, таких как getMetaModel(), unwrap(object), getProperties() и т. д., которые могут предоставить дополнительную информацию,

0 голосов
/ 23 ноября 2011

Я попытался обобщить информацию, которую смог получить из списка рассылки Glassfish, форума Eclipselink и ответа Nayan Wadekar, и опубликовал его здесь .

Короче говоря, вы можете сравнитьразвернутый JPA-провайдер EntityManager s, который предоставит вам более адекватную информацию, чем сервер приложений EntityManager.
Другой способ - проверить ключ транзакции, чтобы убедиться, что вы используете одну и ту же транзакцию в разных методах.Если это так, то это означает, что вы должны использовать тот же PersistenceContext.

...