Ich habe Spring Data 1.10.4.RELEASE nach dem Beispiel in Spring Data Docs getestet Ссылка
und ich habe einige Probleme bemerkt, für die ich zwei Fragen habe.
Zuerst nehmen wir an, ich habe diese 2 Entitäten:
%Vor%für die folgenden Projektionen:
%Vor%wenn ich findPersonByFirstNameProjectedForLimitedData em>
ausfühle %Vor%gibt genau das zurück, was erwartet wurde:
%Vor%Wenn ich jetzt in das generierte SQL schaue, habe ich folgendes:
%Vor%Die Projektion für die Entität "Person" wählt nur "fistName" aus, was zu 100% richtig ist, weil ich in der PersonLimited-Schnittstelle nur "getFirstName" definiert habe.
Aber für die Entität "Address" wählt sie alle Felder aus, was falsch ist, weil ich in der AddressLimited-Schnittstelle nur "getCountry" definiert habe. Es sollte nur "country" ausgewählt werden.
Die generierte Abfrage sollte etwa lauten:
%Vor%Es stellt sich also die Frage, warum nicht nur das Feld "Land" für die Adresse "Entität" ausgewählt wird. Warum muss es alle Felder auswählen? Ist es ein Fehler im Frühling?
für die gleiche Projektion wie oben,
wenn ich findAllPersonsProjectedForLimitedData em>
ausfühle %Vor%gibt genau das zurück, was erwartet wurde:
%Vor%Wenn ich jetzt in das generierte SQL schaue, habe ich folgendes:
%Vor%Hier wählt die Projektion für die Entitäten Person und Adresse alle Felder aus, die falsch sind. Sie sollten nur "Vorname" und "Land" auswählen.
Die generierte Abfrage sollte etwa lauten:
%Vor%ist das das normale Verhalten, sollte nicht nur die Felder auswählen, die wir brauchen?
Danke,
Wenn Sie die Annotation @Query mit Spring Data Projections verwenden möchten, müssen Sie den Feldalias verwenden und sicherstellen, dass Sie die Projekte mit den Projektionsfeldern verknüpfen. Der folgende Code sollte für Frage 1 funktionieren:
%Vor%Eine andere Alternative, die Sie verwenden können, ist Ihre Abfragen mit Eigenschaftsausdrücke . wann immer es möglich ist:
%Vor%Tags und Links java spring-data-jpa spring-data