Nachteile der Verwendung von Hibernate EntityManager (vs. Hibernate Core)?
Dem Hibernate EntityManager Dokumentation Staaten, dass:
Verwenden Sie möglicherweise eine Kombination von allen drei zusammen, Anmerkungen ohne JPA
Schnittstellen-Programmierung und lifecycle -, oder sogar rein native Hibernate Core,
je nach den geschäftlichen und technischen Anforderungen Ihres Projekts. Sie können bei
alle Zeiten zurückgreifen, die native Hibernate-APIs, oder, wenn nötig, auch zu
native JDBC und SQL.
Code, der verwendet die JPA-API (EntityManager) deutlich mehr tragbar (sogar mit gelegentlichen fallbacks Hibernate-Core).
Aber hätte ich irgendwelche Vorteile bei der Verwendung von rein Hibernate-Core? Ich Frage mich, ob die JPA-2-Modell wirklich passt oben auf den Hibernate Core ohne Widersprüche? IOW, ist ein fallback auf den Core immer einfach und ohne Probleme?
Meine größte Sorge ist diese:
Vielleicht, die Unterschiede sind nicht nur in der API, aber auch in der zugrunde liegenden Semantik?! (e. g. verschiedene Transaktion/Versionsverwaltung/sperren Semantik, der möglicherweise in Konflikt: Pessimistische sperren ist bereits in der Core-Dokumentation, aber nicht in der EntityManager Dokumentation - so könnte ich noch verwenden pessimistische sperren durch einen Rückgriff auf die Core ohne dass es Probleme? Dinge wie, dass...)
- Eigentlich pessimistische sperren ist in JPA 2.0, so ist es ein schlechtes Beispiel, aber ich bekomme Ihren Punkt.
- So ist es nur fehlt in der Hibernate-Doku (es ist in docs.jboss.org/hibernate/stable/core/reference/en/html/..., aber nicht docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/...)
- Es ist dokumentiert in der EntityManager Referenzhandbuch: 3.12. Sperren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn JPA 2.0 unterstützt, was Sie brauchen, gibt es meiner Meinung nach keinen Vorteil bei der Verwendung von Hibernate Core direkt (und mit JPA 2.0, die Lücke wurde immer dünner, wodurch die Notwendigkeit fallback Kern die Ausnahme, nicht die Regel, das ist eine sehr gute Sache).
Tut es seit JPA 1.0, Hibernate-Entwickler erstellt Hibernate3 mit "JPA in mind" und verabschiedet JPA Semantik, Standards, etc. in Hibernate3. Sie könnten hören wollen Gavin in diesem Tech Talk: Gavin King auf Hibernate3 und EJB3:
Und nach meiner praktischen Erfahrung, ist die Tatsache, dass Hibernate nicht im Widerspruch mit EJB 3 ist wahr.
Ob Sie Kern direkt oder nicht, Sie sind es (die
EntityManager
ist ein wrapper um dieSession
). So, ja, fällt zurück in den Core ist einfach, wenn Sie wirklich (für Dinge, die noch nicht in die spec, wie Sie die Abfrage Durch Beispiel). Und, Nein, dies wird keine Probleme verursachen (da Sie es tatsächlich sind Sie es, oder einen Teil davon, in JPA).Fragen
@BatchSize
. Die funktioniert wirklich gut und verursachen keine Probleme, so lange, dass ich bin sicher, dass meine Fragen nur zurückgegeben, der Ergebnisse erforderlich. (keine post-Filterung Mist). Denn ich habe einige schwere Einheiten, landete ich mit Abfragen nur mit test-Daten, die nahm 850ms zu laden und bringen es bis zu 150 MS. Ohne laden alle überflüssigen Daten.Es wurde klar: je nach den geschäftlichen und technischen Anforderungen Ihres Projekts
Aber hätte ich irgendwelche Vorteile bei der Verwendung von rein Hibernate Core ?
Vergessen Sie nicht, beide Hibernate Annotations und Hibernate EntityManager setzt auf der Hibernate core. So eine weitere Ebene, die. Außerdem verlassen sich auf Ihr mapping der Metadaten in XML-Dateien gespeichert. Einige Anwender bevorzugen die Verwendung von XML-Dateien anstelle von Anmerkungen, weil Sie die Blätter der domain-Objekte, die sich vollständig unabhängig von der DAO-Implementierung, die Sie wählen. Aber bei der Verwendung von annotations, Hibernate mit JPA Buch ist klar
...
Und JPA 2 passt besser, was JPA 1 wurde nicht bereitgestellt. Eine Vielzahl von neuen features ist nun verfügbar, wie
Und so weiter...
Vergessen Sie nicht, JPA EntityManager können Sie abrufen, Ihre zugrunde liegenden herstellerspezifischen Anbieter mit getDelegate Methode, wenn Sie brauchen, features von JPA nicht stellen.
Ich, wie mit der Hibernate Core direkt. Ich bevorzuge auch die XML-mapping-Dateien.
Ich bin nicht wirklich daran interessiert, die Verwendung einer zweiten Schicht, Zugriff auf Hibernate-core-Funktionalität. Soweit ich bin besorgt Portabilität in der Persistenz-Schicht, ist eine komplette nicht-Problem.
Gibt es sehr wenige echte Vorteile von der JPA-API über die Hibernate-API-ich sah Menschen, die mit JPA benannte Abfragen (wo die Kriterien wäre wahrscheinlich klarer & besser), und die JPA-Annotationen sind etwas besser gestaltet.
Andere als das, JPA ist einfach eine Schicht hinzufügen von Komplexität & Potenzial overhead -- für Sie keinen nutzen. Architektonisch in einer solchen situation die richtige Entscheidung sein würde, gegen ihn verwenden.
Datenbank-Portabilität OTOH ist sehr real. Ich habe custom-allocators (Generatoren), die ich verwenden, die vollständig portabel, und weit mehr performant & einfacher als das verrückte Chaos, das ist die mis-entwickelt, Hibernate ersetzt.
Dieser Ansatz wurde sehr erfolgreich auf mehreren großen Unternehmen, Behörden & legacy-Datenbank-re-engineering-Projekte. Kurz gesagt -- das konzentrieren, was wichtig ist-und eine API auf eine API, ist es nicht.
Die Vorteile der Verwendung der JPA-api, überwiegt bei weitem die Nachteile der Verwendung von reinen hibernate. Ich bin kein Experte, aber ich bin mir nicht bewusst irgendwelche Situationen wo es von Vorteil wäre, um die Dropdown-Liste, um Winterschlaf zu halten. (Drop down rein zu tun JDBC ist eine andere Sache.)
Wenn jemand irgendwelche Beispiele zu teilen, ich würde lieben, Sie zu sehen.