Soll ich anrufen EntityManager.clear() oft um Speicherverluste zu vermeiden?
Ich bin neu in JPA/OpenJPA und ich bemerkte, dass wenn ich nicht angerufen EntityManager.clear()
nachdem ich anhalten Entitäten bekomme ich eine OutOfMemoryError
(ich halten das hinzufügen neuer Entitäten in einer Schleife). Ich bin mir nicht sicher, ob dies das erwartete Verhalten, oder ist es nur und OpenJPA 1.2.1 glitch.
So, bin ich verpflichtet, explizit trennen Sie die Einheiten selbst?
Wenn ich mich nicht, es ist eine gute Praxis überhaupt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe nicht viel Erfahrung mit JPA. Doch diese werden nützlich sein -
In JPA, müssen Sie entweder:
- Erstellen Sie einen neuen EntityManager für jede Transaktion.
- Rufen Sie clear() nach jeder Transaktion zum löschen der Persistenz-Kontext.
Hängt davon ab, wie viele Objekte, die Sie bringen in das Persistenz-Prozess (Lesen). Wenn Sie mit sehr großen zahlen (oder einige der Objekte groß sind), dann clear() Sinn machen kann. Jedes mal, wenn ein Objekt gelesen wird, sollte es in den L1-cache der JPA-impl.
Es klingt wie es ist etwas falsch irgendwo, in Ihrem design. In der Regel, die Person wird abgetrennt, sobald es außerhalb des entity-manager. Und das ist der Grund Sie können nicht lazy load Beziehungen außerhalb der Reichweite.
Soweit es meine Erfahrung betrifft, habe ich selten benutzt, em.clear(), wenn überhaupt. Ich verwendete Hibernate-Implementierung, und Toplink Essentials. Keine Erfahrung mit OpenJPA, noch.