2016-05-28 5 views
3

Я всегда думал, что @PersistenceContext предназначен для инъекции EntityManager в приложение, управляемое контейнером, а @PersistenceUnit предназначено для инъекции EntityManagerFactory.Внесите EntityManagerFactory через @PersitenceContext или @PersitenceUnit?

Javadoc говорит

Для PersistenceUnit (http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceUnit.html)

выражает зависимость на EntityManagerFactory и связанного с ним инерционности устройства.

И PersistenceContext (http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html)

выражает зависимость от управляемого контейнером EntityManager и связанной с ним контексте сохранения состояния.

До сих пор так хорошо, но потом я читал учебник JPA (см https://docs.oracle.com/cd/E19798-01/821-1841/bnbqy/index.html), который содержит пример, как этот

В следующем примере показано, как управлять транзакциями в приложение, которое использует приложение управляемых тайцами менеджер лицо:

@PersistenceContext 
EntityManagerFactory emf; 
EntityManager em; 
@Resource 
UserTransaction utx; 
... 
em = emf.createEntityManager(); 
try { 
    utx.begin(); 
    em.persist(SomeEntity); 
    em.merge(AnotherEntity); 
    em.remove(ThirdEntity); 
    utx.commit(); 
} catch (Exception e) { 
    utx.rollback(); 
} 

поэтому PersistenceContext также может относиться к EntityManagerFactory, если мы говорим о применении управляемого кода?

отказ от ответственности - не связано с ответами от этого вопроса, я думаю, - PersistenceUnit vs PersistenceContext

+0

Вы все еще ищете ответ? –

ответ

2

Я всегда считал, что @PersistenceContext был для инъекций EntityManager в контейнер управляемого приложения, в то время как @PersistenceUnit был для вводя EntityManagerFactory.

Это правда.

Я думаю, что пример учебника JPA - неосторожная ошибка. Ранее в том же разделе «Применение управляемых сущностей Менеджеры» написано

Чтобы получить экземпляр EntityManager, вы должны сначала получить EntityManagerFactory экземпляра, вводя его в компонент приложения с помощью аннотаций javax.persistence.PersistenceUnit :

@PersistenceUnit EntityManagerFactory emf;

Тогда получаем EntityManager из EntityManagerFactory Например:

EntityManager ет = emf.createEntityManager();

+0

это не для EntityManager, а для EntityManagerFactory! – Leo

Смежные вопросы