Nutzen hibernate sessionFactory oder JPA entityManager?
Arbeite ich an einem Projekt mit Hibernate 4.1, Spring 3.1, und JPA 2.0, und ich möchte, um zu überprüfen, dass das, was habe ich zusammengetragen aus dem internet, der richtige ist.
Ich versuche zu entscheiden, ob es sich um einen JPA entityManager oder die hibernate-spezifische sessionFactory.
Zuerst habe ich geplant, entityManager und vollständige JPA-Spezifikationen, so dass mein Projekt wäre, entkoppelt aus dem Ruhezustand, und ich konnte es wechseln sich für etwas anderes, sagen EclipseLink, wenn der Lust hat mich oder etwas, das mich davon überzeugt später auf.
Allerdings scheint es, dass der entityManager hat einige sehr wichtige Einschränkungen.
Meine Fragen:
Der einzige Grund, ich würde wollen, verwenden Sie die vollständige JPA-Spezifikationen und den entityManager zu können, schalten Sie den Ruhezustand für eine andere JPA-2.0-kompatibel ORM relativ leicht, Recht? Gibt es wirklich keine performance /Funktionalität /einfache Programmierung Vorteile mit den entityManager?
Zweiten, wie es scheint, die hibernate sessionFactory hat eine Menge Vorteile, die über den entityManager. Bisher habe ich laufen in das Problem, dass der entityManager kann nicht führen Sie eine Batchdatei einfügen einer Liste von Entitäten, die ich gelesen habe die sessionFactory kann. Ich habe auch gelesen, dass die sessionFactory kann sich wieder ein auto-generierte entity-ID automatisch, während mit dem entityManager Sie brauchen, um die Transaktion zu beenden /Spülen Sie den Persistenz-Kontext-ziehen Sie die neu erzeugte id.
Ich mochte die Idee, mein Projekt ist relativ entkoppelt von Hibernate, aber ich würde viel eher in der Lage zu schreiben, effiziente Datenbank-updates aus der get-go. Also ich sollte Umschalten, um mein Projekt konfiguriert wird für den Ruhezustand und die sessionFactory, richtig?
entityManager
- und Auspacken es zu einer sessionFactory
wenn Sie spezifische Anforderungen haben,... stackoverflow.com/questions/5640778/... Dies scheint ein wenig seltsam, aber entweder Sie wollen stick mit standards und verwenden nur entityManager
oder Sie wissen, dass Sie lieber Hibernate-spezifische features und verwenden sessionFactory
nur...Ja, das ist eine gute Idee. Ich nehme an, müsste jemand erwähnt das es in diesem thread, wenn es ein Problem mit es zu tun auf diese Weise. Ausserdem wollte ich herausfinden, ein Weg, in dem der entityManager zu sein scheint schöner. Es hat TypedQuery, die ich glaube nicht, dass Sie verwenden können, mit der Sitzung.
Coray, was hast du am Ende mit ? Gibt es wirklich keine performance-Vorteile des einen über den anderen ?
Ich habe ein paar Projekte, die jetzt. Ich habe hauptsächlich den JPA entityManager, aber ich glaube trotzdem nicht, dass es irgendeinen praktischen Grund, dies zu tun. Ich bin mehr gewohnt, dass jetzt, obwohl, und ich glaube nicht, dass es einen großen Unterschied macht (es sei denn, Sie wirklich brauchen, um batch-insert-Dinge!) Was ich eigentlich bevorzuge, ist die Verwendung von Spring Data nun. Es vereinfacht die Dinge, eine Menge über die beiden anderen Optionen.
InformationsquelleAutor CorayThan | 2013-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde stick zu JPA2, wie würden Sie verwenden
List
eher alsArrayList
: Sie begünstigen die Schnittstelle (oder abstract) über die Umsetzung. Es gibt nicht viel Unterschied, abgesehen von HQL zu wissen, "mehr" Zeug als JPQL oder exotische Funktion. Denken Sie auch daran, dass der PPV war nach Hibernate mit Hibernate als "inspiration" hinter JPA.Und für exotische feature: Hibernate Entity Manager-wrap eine Hibernate-Session. Wenn Sie Sie wirklich benötigen, können Sie werfen die
EntityManager
auf der Hibernate-Schnittstelle (org.hibernate.jpa.HibernateEntityManager
) und verwenden Sie diese session. Aber ich würde Lügen, wenn ich sage, ich habe es versucht.Ich bemerkte auch Teil Ihrer Frage:
Wechsel von Hibernate zu EclipseLink bedeutet nicht, dass Sie "nur müssen swap the jar". Die Zuordnung und Beschriftung-Analyse, ist nicht das gleiche, und Sie werden Probleme, die wahrscheinlich davon abhalten, die Sie von einem Wechsel.
Lesen Sie meine Frage hier ein Beispiel für ein problem, das ich gestoßen, während mit beiden (es war ein maven-Projekt mit einem Profil zu wechseln, JPA2.1 impl von EclipseLink, Hibernate). Ich ließ EclipseLink, da konnte ich nicht name das Datenbank-Objekt (oder vielmehr geben Sie den Namen der Datenbank-Objekt), wie ich wollte.
Diese hängt davon ab, wie generieren Sie Ihre entity-id. Aber denken Sie daran: Sie entity nicht persistent gespeichert, bis der Persistenz-Kontext beibehalten werden muss. Dies ist der Grund, warum du keine id haben. Spülen, aka senden Sie eine insert-Abfrage mit einer generierten id, ist der einzige Weg, es zu tun.
Gleiches gilt für session-Fabriken.
Könnten Sie jedoch in der Lage sein, um den Zugriff auf eine Sequenz-generator aus dem Ruhezustand, aber Sie können auch tun, in native SQL mit
EntityManager
.Nehmen Sie es wie ein troll gegen ORM, aber für eine effiziente Datenbank zu aktualisieren, verwenden Sie plain-JDBC - (oder Spring Jdbc-Template). Zumindest wissen Sie, wenn Daten aktualisiert werden, und Sie werden in der Lage sein, um besser zu optimieren (batch-update, etc).
InformationsquelleAutor NoDataFound
JPA ist eine Schnittstelle, über Hibernate, die eine jdbc-Schnittstelle an, über so näher Sie jdbc die mehr Kontrolle Sie erhalten über Ihre Anfragen aber weiter man vom Objekt - /relationale Persistenz .
Ja, die Überwintern kann, haben einige Werkzeuge, jpa möglicherweise nicht in diesem moment (ich.e hibernate spatial)
Hibernate ist Spaß und können mit JPA-Annotationen für das mapping von domain-Modell (wenn Sie die Anmerkungen, die Weg über die .hbm-Dateien) . Und die Art, wie die @Transactional-annotation funktioniert im Frühjahr ist es egal, ob man hibernate oder jpa, da Sie nicht brauchen, Sitzung.open () ... - Sitzung.beginTranscation ...Sitzung.in der Nähe ...etc ... all diese ausführlichen Hibernate-code ist Weg!
Es gibt tolle Dokumentation zu Hibernate und Super Bücher. Da für die JPA-ich kann nicht sagen, dass ich fand, der nzahl Buch...
InformationsquelleAutor George Papatheodorou