Der Link von okwap ist sehr hilfreich. Um sicherzustellen, dass es nicht durchrutschen, und den Board-Regeln zu folgen, habe ich eine Kopie hier:
- 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
Auf dieser Grundlage werde ich hinzufügen, dass geben kann sogar Objekte mit unterschiedlichen Inhalten durch zwei verschiedene EntityManager lesen , wenn in der Zwischenzeit eine Datenbanktransaktion von jemand anderem ausgeführt wurde. Wenn Sie jedoch wiederholt durch denselben EntityManager lesen, wird der zweite Lesevorgang das Objekt nur aus dem Cache des EntityManagers holen, so dass der neuere Status einfach nicht sichtbar ist.
Bei Verwendung des ersten Ansatzes ist EntityManager manchmal nicht synchronisiert, da 'ThreadLocal' für jeden Thread einen neuen EntityManager erzeugt. Ich habe nur eine Wahl: einen neuen EntityManager pro Transaktion zu erstellen. – user2198754
James Sutherland empfiehlt die Wiederverwendung von EntityManager während der Anfrage. Der Hauptgrund ist die Persistenzkontextfreigabe. Stimmst du dem zu? http://www.codeanch.com/t/550734/ORM/databases/Practice-EntityManager – okwap