Aktuell Dies ist aus einem Repository nicht möglich. Spring Data Hopper hat eine Projection
-Funktion eingeführt, die dies zulässt, aber die Implementierung des Couchbase-Speichers deckt sie noch nicht ab.
Es gibt etwas in der Nähe CouchbaseTemplate
, die eine findByN1QLProjection
-Methode hat, aber es braucht ein DTO für die Abfrage gewidmet. Zum Beispiel:
SELECT name, lastName FROM #{#n1ql.bucket} WHERE code = $1 AND #{#n1ql.filter}
, die (in reinen N1QL) äquivalent zu:
SELECT name, lastName FROM bucketThatBacksRepository WHERE code = $1 AND _class = "com.example.Person"
die folgende Klasse erfordern mit findByN1QLProjection
zu arbeiten:
public class PersonNameDTO {
private final String name;
private final String lastName;
//constructor and maybe getters/setters needed but omitted here
}
Und es wäre ein List<PersonNameDTO>
produzieren . Beachten Sie, dass sich dies nicht wesentlich von der Projektionsfunktion unterscheidet, über die ich gesprochen habe, abgesehen davon, dass es sich eher um Schnittstellen als um konkrete DTO-Klassen handelt.
Beachten Sie, dass Sie den #{#n1ql.selectEntity}
SpEL nicht verwenden sollten, da sein Zweck eine große SELECT-Klausel ist, die alle Felder einer gegebenen Entität abdeckt (während Sie hier die SELECT-Klausel einschränken möchten).
Es umfasst auch die FROM-Teil mit dem richtigen Eimer zu Ihrem Repository verbunden ist, aber die #{#n1ql.bucket}
auch, dass ein Teil abdeckt (und diesen Teil nur) ...
Diese Funktion wirklich nützlich wäre, scheint, wie es nicht ist möglich atm aber wäre wirklich nett zu umfassen. – Abbadon