Il collegamento fornito da okwap è molto utile. Per assicurarsi che non scivolare attraverso, e di seguire le regole di bordo, ho messo una copia qui:
- an EntityManager contains a persistence context, that will track
everything read through it, so to avoid bloated memory, you should
acquire a new one, or clear it at some point
- if you read the same object through two different EntityManager you
will get different objects back, so will loose object identity, which
is something to consider
Sulla base di ciò, vorrei aggiungere, che la lettura attraverso due differenti EntityManager può dare anche oggetti con contenuti diversi , se nel frattempo una transazione del database è stata eseguita da qualcun altro. Ma se si legge ripetutamente attraverso lo stesso gestore di entità, la seconda lettura otterrà l'oggetto dalla cache del gestore di entità, quindi lo stato più recente non sarà visibile.
Quando si utilizza il primo approccio, a volte EntityManager non è in 'sync' perché 'ThreadLocal' genera il nuovo EntityManager per ogni thread. Sono partito con una sola scelta: creare un nuovo EntityManager per transazione. – user2198754
James Sutherland consiglia di riutilizzare EntityManager durante la richiesta. Il motivo principale è la condivisione del contesto di persistenza. Sei d'accordo? http://www.coderanch.com/t/550734/ORM/databases/Practise-EntityManager – okwap