Mögen Sie die Kriterien api von JPA 2.0? Verwenden Sie es mit dem Rahmen?
Ich bin gewohnt, arbeiten mit Kriterien-API, Hibernate, und beobachtete, wie die Kriterien in JPA 2.0 arbeiten.
Was ich wie die meisten in den Kriterien von Hibernate ist die Leichtigkeit, die wir haben, zu Komponieren, mit Kriterien.
JPA Kriterien scheint ziemlich schwer für mich, und nicht so fließend, wie der Hibernate-Kriterien.
Einer der großen Vorteile im Vergleich zu Hibernate für mich zu sein scheint der nutzen der Metamodell - (Entity_.java Klassen), aber trotzdem ist es ein bisschen schwer zu, da Sie zu pflegen haben 2 Klassen, oder fügen Sie eine annotation-Prozessor (obwohl seine sehr einfache Integration mit maven-plugins)
Ich gelesen habe, einen blog zu SpringSource, dass die Genehmigungen zur Reduzierung der Komplexität der Komposition mit "JPA-Prädikate", und führen Sie ein bisschen wie mit Kriterien in den Ruhezustand versetzt werden.
Den Querydsl Projekt scheint interessant.
http://blog.springsource.com/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
Frage mich nur, für diejenigen, die sich mit JPA2, sind Sie mit Criteria API oder es ist ein bisschen zu schwer für Sie?
Für diejenigen, die vertraut mit Hibernate Kriterien und wer sich jetzt die Arbeit mit JPA Kriterien, dowhich Ansatz magst du am meisten und warum?
Erwägen Sie die Verwendung, oder die Verwendung eines Rahmens, wie Querydsl oder Frühjahr Spezifikationen über JPA2 Abfrage erstellen Prädikate?
Glauben Sie, dass diese frameworks sind ausgereift genug, angenommen zu werden?
- Sie müssen nicht auf die Metamodell-Klassen mit Kriterien offensichtlich, stattdessen nur über Texte (wie in "Hibernate Criteria").
- ich wusste nicht, könnten wir Streicher, alle exemples ich sah, waren mit Metamodell.
- Siehe datanucleus.svn.sourceforge.net/viewvc/datanucleus/test/... für einige tests, die wir (DataNucleus) Verwendung für string-basierte Kriterien, offensichtlich verlieren Sie die refactor-Funktion durch die Verwendung von Zeichenfolgen, aber die Menschen sollten frei sein, zu wählen
- Ich verwende JPA 2.0 / JPA 2.1 Kriterien API ausgiebig zu generieren einfache als auch relativ komplizierte Abfragen. Ich habe noch nicht gefunden, alles, was genannt werden kann, "schwer" und / oder "kompliziert". Das einzig irritierende daran ist, dass es nicht immer möglich, richtig vorauszusagen, die SQL-Anweisung, welche erzeugt werden auf der Grundlage des angegebenen Kriterien Abfrage, das Verhalten ist provider-spezifisch in einigen Situationen (das gleiche gilt für die JPQL auch). Also, man muss immer sorgfältig beobachten, die generierte SQL-Anweisung(en).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kann auch nur eine voreingenommene Meinung, denn ich bin der maintainer von Querydsl, aber ich denke, dass beide Querydsl und Spring Spezifikationen sind reif genug. Beide bieten eine dünne Schicht auf der Oberseite der JPA 2, Querydsl bietet eine fluent-DSL-Abfrage-Bau-und Spring-Data-Muster für DAO/Repository Bau.
Die Expressivität von Querydsl ist vergleichbar mit HQL/JPQL.
Hier sind ein paar JPA 2 Criteria queries und deren Querydsl Versionen : http://source.mysema.com/forum/mvnforum/viewthread_thread,49
Wir bieten einen schnellen bug-fix-Zyklen und reaktionsschnellen support in unserer Foren. Die Querydsl-team kooperiert mit Feder, DataNucleus und anderen Parteien, die zur Verbesserung des Zustandes von typesafe Abfragen in Java.
Nein, mag es nicht, aufgrund der fehlenden expressability und Geläufigkeit in der API. Ja QueryDSL macht das gleiche in weniger code und mehr natürlich. Aus diesem Grund haben wir die gleiche route JDO eigenen typesafe-Abfrage-API, zu vergleichen JPA Criteria
https://datanucleus.wordpress.com/2010/11/09/jdo-typesafe-vs-jpa-criteria/
Verwende ich JPA criteria builder intensiv. Ich nutze das Metamodell, type-safe-Variante, aber das ist nicht die einzige option. Wenn Sie vergleichen möchten, JPA zu anderen frameworks zählt nicht die Tatsache, dass Sie brauchen, um zu generieren Metamodell-Klassen. Sie nicht, für die gleichen functionnality, nur für extra-Vorteile. Ich würde nicht gehen Sie zurück zu einem nicht-typsicheren Ansatz, aber.
Wenn man sich daran gewöhnen, es ist sehr einfach zu bedienen und dennoch leistungsstark.
Einen zusätzlichen Vorteil: es ist standard. In: mehrere Experten aus verschiedenen Organisationen vereinbart. Die Qualität der Spezifikation ist sicher, und es ist noch in der Entwicklung. Und Sie bekommen mehrere Implementierungen (wirklich, mindestens zwei von Ihnen verwendet wird in die meisten gängigen application-Server). Sie nicht bekommen, dass, wenn Sie nehmen eine zufällige framework, die möglicherweise oder möglicherweise nicht stand der Nachweis der Zeit.
Einige Beispiele von JPA2:
Könnten Sie quetschen all dies auf eine Linie, aber ich meistens nicht wählen, es zu tun, dass zu 100% klar, code und 1 Anweisung pro Zeile.
QPerson
das ist so sicher, wie Sie. JPA ist der standard, in der Tat. Das bedeutet auch, dass es sich weiterentwickeln kann, aber kaum ändern für besser, wenn Sie einen Fehler gemacht haben schon. Vergleich von Querydsl und JPA Criteria API, wähle ich Querydsl jeder Zeit. Sie änderten Ihre API eine Menge, zusammen mit package-Namen von v3 zu v4. Ergebnis ist eine fluent-API, die noch näher an SQL-Semantik (beginnend mit "wählen Sie "was") - Art der Veränderung, wir können einfach nicht erwarten, dass von JPA, sei es gut oder schlecht ist.Dog
mit@ManyToOne
zu Züchten, mapping so einfach wie möglich. Wenn ichselect d from Dog d where d.breed.name = 'collie'
bekomme ich wieder richtige resuts (1 Hund namens "Lassie", nicht überraschend). Wenn ich diese löschendelete from Dog d where d.breed.name = 'collie'
, Hibernate erzeugtdelete from Dog cross join Breed breed1_ where name=?
was aber nicht funktioniert (zumindest auf H2), nicht zu erwähnen, beide Tabellen habenname
die nicht unterscheiden, so ist es falsch, selbst wenn es magisch gearbeitet. Wennwhere clause
für löschen erlaubt das nicht... (Nächstes Kommentar)d.breed=
in diesem Fall (obwohl ich, um die spezifische Rasse zuerst die Wahrscheinlichkeit erhöht roundtrips zur DB), aber ich kann nicht schreiben, wenn ich etwas benutzt wied.breed.name like ...
oder jede andere Bedingung impliziert mehrere Rassen. Ich bin In jedem Fall froh, dass wir scheiden in Frieden. 🙂Benutze ich JPA2 in meinen Projekten und immer gefunden, Kriterien API ein bisschen zu kompliziert vor allem für Gebäude einfache select-Anweisungen mit ein paar where-Bedingungen.
Also habe ich beschlossen zu gehen mit JPQL-Abfragen. Vielleicht sind die Kriterien, die API hat seine Stärke bei komplexeren Abfragen (neben einigen anderen Vorteilen).