Можно ли использовать @PersistenceUnit и @PersistenceContext в одном приложении - PullRequest
0 голосов
/ 31 октября 2019

Я унаследовал приложение, и файл persistence.xml имеет следующее:

    <persistence-unit name="nxPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>someDSName</non-jta-data-source>

Код использует @PersistenceUnit и @PersistenceContext, но я читаю только для транзакции-типа = "RESOURCE_LOCAL" @PersistenceUnit следует использовать. Приложение работает нормально и большую часть времени использует @PersistenceContext, поэтому я не понимаю, почему они не использовали транзакцию type-type = "JTA".

Я не хочу менятьрабочий код, но мы отметили проблемы с производительностью, поэтому мне интересно, может ли это смешанное использование способствовать этому.

1 Ответ

1 голос
/ 01 ноября 2019

На самом деле это совершенно независимые понятия.

  1. Что касается типов транзакций. Как весенняя документация говорит

Обычно вам требуется возможность JTA сервера приложений, только если вашему приложению нужно обрабатывать транзакции через несколько ресурсов, что не является обязательным для многих приложений. ,Многие высокопроизводительные приложения вместо этого используют одну масштабируемую базу данных (например, Oracle RAC).

Что касается @PersistenceUnit и @PersistenceContext.

Когда вам нужно использовать EntityManagerFactory, вы должны использовать @PersistenceUnit. Когда вам нужно использовать EntityManager, вы должны использовать @PersistenceContext.

Кстати, JPA 2 позволяет вам получить EntityManagerFactory из существующего EntityManager. См. Метод EntityManager.getEntityManagerFactory()

См. Также this .

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