Wie erstelle ich ein GenericDao mit QueryDSL?

8

Erstens, ich bin wirklich neu in QueryDSL.

Ich verwende eine Spring + Hibernate-Umgebung.

Das Problem, mit dem ich konfrontiert bin, ist die Erstellung eines GenericDAO, um alle grundlegenden CRUD-Operationen zu implementieren, aber ich bin nicht sicher, wie ich die statische Referenz von einer QEntity bekomme.

Meine Entitätsklassenstruktur sieht so aus:

%Vor%

Die Grundstruktur einer von QueryDSL generierten Entität

%Vor%

Und das GenericDao würde so aussehen:

%Vor%

Ein Ansatz wäre die Verwendung von Reflection, aber ich bin kein Verfechter der Verwendung dieser Methode, besonders in diesem Fall.

Eine andere Sache, von der ich mir nicht sicher bin, ist die obligatorische Verwendung der statischen Referenz von einer QEntity, um Abfragen zu erstellen, oder ist es in Ordnung, wenn ich einen Konstruktoraufruf mache, um ein neues Objekt zu erhalten. Was bedeutet der String im Konstruktorparameter?

%Vor%     
Alexandru Tomuta 24.01.2014, 10:01
quelle

1 Antwort

8
  

Das Problem, mit dem ich konfrontiert bin, ist die Erstellung eines GenericDAO, um alle zu implementieren   die grundlegenden CRUD-Operationen, aber ich bin mir nicht sicher, wie bekomme ich die statische   Referenz von einer QEntity.

Ohne einen Verweis auf die QEntity-Klasse ist es schwierig. Stellen Sie daher sicher, dass Sie Ihrem DAO eine Instanz bereitstellen.

  

Eine andere Sache, von der ich mir nicht sicher bin, ist die Verwendung des statischen   Referenz von einer QEntity, um Abfragen zu erstellen, oder ist es in Ordnung, wenn ich a   Konstruktoraufruf, um ein neues Objekt zu erhalten. Was macht der String in der   Konstruktorparameter bedeuten?

Nein, das ist nicht obligatorisch, es ist eine praktische Instanz. Das Konstruktorargument ist der Variablenname. Wenn Sie eine benutzerdefinierte Instanz bereitstellen, müssen Sie sicherstellen, dass Sie denselben Variablennamen konsistent verwenden.

Stellen Sie außerdem sicher, dass Sie die neueste Version von Querydsl verwenden. PEntity sieht wie eine Klasse vor 2.0 aus.

Hier ist ein Beispiel für eine generische DAO-Superklasse für die Verwendung von Querydsl JPA Ссылка

Aktualisieren

Wenn Sie vermeiden möchten, den Q-Typ an Ihre DAO-Klasse zu übergeben, können Sie ein Muster wie dieses verwenden Ссылка

Der Variablenname ist der einfache Name Ihrer Entitätsklasse, wobei der erste Buchstabe in Kleinbuchstaben umgewandelt wird.

    
Timo Westkämper 24.01.2014, 14:04
quelle

Tags und Links