2011-01-17 12 views
0

Ich habe ein Problem mit meinem Entity Manager in meiner Anwendung. Ich habe zwei DAO clasess wie folgt aus:EntityManager und zwei DAO mit PersistenceContextType.EXTENDED

@Repository 
public abstract class DaoA 
{ 
    protected ClassA persistentClass; 

    @PersistenceContext(name="my.persistence", type=PersistenceContextType.EXTENDED) 
    protected EntityManager entityManager; 
    -------------- some typical action for DAO -------------- 
} 

Zweite DAO für ClassB ist und sieht ähnlich aus wie DaoA. Der Rest der Dinge wird für mich durch den Spring-Rahmen getan.

Beim Debuggen der Anwendung erkenne ich, dass beide DAO-Objekte verschiedene Instanzen von EntityManager haben. Im Ergebnis sind meine zwei verschiedenen DAOs mit verschiedenen PersistenceContext verbunden.

Frage ist, ob das richtige Verhalten ist oder nicht? Ich hätte gerne den gleichen PersistenceContext für alle meine DAO-Klassen. Bitte geben Sie mir einen Hinweis, wenn dies möglich ist und ob ich die JPA richtig verstanden habe?

Grüße Hsd

Antwort

1

Es ist ein richtiges Verhalten von EXTENDED Persistenzkontext deshalb brauchen Sie es nicht EXTENDED in diesem Fall zu sein.

In den meisten Fällen benötigen Sie einen TRANSACTIONAL Persistenzkontext, das ist der Standardmodus, wenn type weggelassen:

@PersistenceContext(name="my.persistence") 
protected EntityManager entityManager; 

In diesem Modus Persistenzkontext mit der Transaktion verbunden ist, so dass alle DAOs das gleiche teilen Persistenzkontext, wenn in derselben Transaktion gearbeitet wird. Ich schätze es ist was du brauchst.

+0

Danke für die schnelle Antwort. Bedeutet dies, dass es nicht möglich ist, nur eine PersistenceContext-Instanz für viele DAO-Instanzen zu haben? – hsd

+0

@hsd: Aktualisiert .. – axtavt

+0

Nur eine zusätzliche Frage. Ist es möglich PersistenceContextType.EXTENDED zu haben, was es über alle meine DAOs verteilt? – hsd