2013-02-28 9 views
5

Zum Beispiel JPA Criteria API kann ohne generierte Metamodell verwendet werden. Die Typsicherheit geht verloren, aber ich kann Abfragen ohne vorherige Kenntnis des Datenmodells erstellen, indem ich nur zur Laufzeit Reflektion verwende. Ich würde gerne Querydsl auf die gleiche Weise verwenden. Typsicherheit ist mir egal, da ich das Datenmodell ohnehin nicht kenne.Kann Querydsl ohne generierte Abfragetypen verwendet werden?

Auf meinem letzten Projekt möchte ich Querydsl hauptsächlich verwenden, weil es eine andere Schicht über Persistenz bildet. Also kann ich hoffentlich dieselben Abfragen über JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Collections und RDFBean verwenden.

Oder gibt es eine Alternative zu Querydsl, die in der beschriebenen Weise verwendet werden kann?

Da NoSQL DBs auf dem Vormarsch sind. Gibt es einen anderen Rahmen, der eine ähnliche abstrakte Schicht über verschiedene Persistenzanbieter darstellt?

Antwort

5

Es gibt zwei Möglichkeiten, Querydsl ohne ein generiertes Metamodell zu verwenden.

Der erste Weg ist Ihre Ausdrücke manuell http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379

zu konstruieren, und das zweite ist die Alias-Funktionalität von Querydsl http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html

Die Querydsl Abfragen teilen gemeinsame Schnittstellen zu nutzen und gleich aussehen, aber man kann‘ t dieselben Abfragen über verschiedene Persistenztypen direkt verwenden, da Querydsl keine querschnittsübergreifende Abstraktion anbietet.

Einzelne Teile von Abfragen können gemeinsam verwendet werden, z. B. Prädikate oder Prognosen, aber Abfragen sind an ein bestimmtes Modul gebunden.

Sie können sich an eine der gebräuchlichen Persistenzabstraktionen JPA oder JDO halten und RDBMS-, OODB- und NoSQL-Engines über diese verwenden.

+0

Es ist schade, dass Querydsl keine solche Abstraktion über Module bietet. Das wäre sehr vorteilhaft und könnte Querydsl zu "LINQ Alternative in Java Ecosystem" drängen. Gibt es einen besonderen Grund, warum Querydsl diese Funktionalität nicht bietet? Warum unterscheiden sich die Abfragen in den Modulen? –

+0

Bietet LINQ das sogar? –

+1

Querydsl zielt nicht darauf ab, eine Persistenzabstraktion bereitzustellen, das ist der Hauptgrund, das Hauptziel besteht darin, eine typensichere konsistente Syntax für Persistenzabfragen bereitzustellen. –

Verwandte Themen