Ich verwende Spring JPA, um alle Datenbankoperationen auszuführen. Ich weiß jedoch nicht, wie ich in Spring JPA bestimmte Spalten aus einer Tabelle auswählen soll.
Beispielsweise:
SELECT projectId, projectName FROM projects
java
jpa
spring-data-jpa
user1817436
quelle
quelle
Antworten:
Sie können
nativeQuery = true
die@Query
Annotation aus einerRepository
Klasse wie dieser festlegen :Beachten Sie jedoch, dass Sie das Mapping selbst durchführen müssen. Es ist wahrscheinlich einfacher, nur die reguläre Zuordnung wie diese zu verwenden, es sei denn, Sie benötigen wirklich nur diese beiden Werte:
Es lohnt sich wahrscheinlich auch, sich die Spring- Datendokumente anzusehen .
quelle
FIND_PROJECTS
) mit demvalue
Attributnamen qualifizieren (wenn dies also mein Code wäre, hätte ich ihn schreiben@Query(value = FIND_PROJECTS, nativeQuery = true)
müssen usw.Sie können Projektionen aus Spring Data JPA (doc) verwenden . Erstellen Sie in Ihrem Fall eine Schnittstelle:
und fügen Sie Ihrem Repository die folgende Methode hinzu
quelle
Ich mag die Syntax nicht besonders (sie sieht ein bisschen hackig aus ...), aber dies ist die eleganteste Lösung, die ich finden konnte (sie verwendet eine benutzerdefinierte JPQL-Abfrage in der JPA-Repository-Klasse):
Dann müssen Sie natürlich nur einen Konstruktor bereitstellen
Document
, derdocId
&filename
als Konstruktorargumente akzeptiert .quelle
In meiner Situation brauche ich nur das json-Ergebnis, und das funktioniert bei mir:
im Controller:
quelle
Object
durch eine benutzerdefinierte Schnittstelle ersetzen, wie von mpr beschrieben. funktioniert einwandfreiIn meinem Fall habe ich eine separate Entitätsklasse ohne die Felder erstellt, die nicht benötigt werden (nur mit den Feldern, die benötigt werden).
Ordnen Sie die Entität derselben Tabelle zu. Wenn nun alle Spalten erforderlich sind, verwende ich die alte Entität. Wenn nur einige Spalten erforderlich sind, verwende ich die Lite-Entität.
z.B
Sie können so etwas erstellen wie:
Dies funktioniert, wenn Sie die abzurufenden Spalten kennen (und dies wird sich nicht ändern).
funktioniert nicht, wenn Sie die Spalten dynamisch festlegen müssen.
quelle
Ich denke, der einfachste Weg ist die Verwendung von QueryDSL , das mit den Spring-Data geliefert wird.
Mit Ihrer Frage kann die Antwort sein
Der Entitätsmanager kann automatisch verdrahtet sein und Sie arbeiten immer mit Objekten und Klassen ohne Verwendung der * QL-Sprache.
Wie Sie im Link sehen können, erscheint die letzte Auswahl fast für mich eleganter, dh die Verwendung von DTO zum Speichern des Ergebnisses. Wenden Sie auf Ihr Beispiel Folgendes an:
Definieren von ProjectDTO als:
quelle
Mit den neueren Spring-Versionen kann man wie folgt vorgehen:
Wenn Sie keine native Abfrage verwenden, können Sie dies wie folgt tun:
Mit der nativen Abfrage können Sie wie folgt vorgehen:
Einzelheiten finden Sie in den Dokumenten
quelle
Meiner Meinung nach ist dies eine großartige Lösung:
und es so zu benutzen
quelle
Bei Verwendung von Spring Data JPA ist die Auswahl bestimmter Spalten aus der Datenbank vorgesehen
---- In DAOImpl ----
---- In Repo ----
In meinem Fall hat es zu 100% funktioniert. Vielen Dank.
quelle
Sie können JPQL verwenden:
oder Sie können eine native SQL-Abfrage verwenden.
quelle
Es ist möglich,
null
als Feldwert in nativem SQL anzugeben.quelle
Sie können den folgenden Code in Ihrer Repository-Schnittstellenklasse anwenden.
quelle
Native Abfrage verwenden:
quelle
Sie können die von @jombie vorgeschlagene Antwort verwenden und:
findAll()
Methode zu diesem Zweck nicht, sondern verwenden Sie einen Namen Ihrer Wahl.List
mit Ihrer neuen Schnittstelle parametrisierte Datei zurückzugeben (zList<SmallProject>
. B. ).quelle