В настоящее время , это невозможно из хранилища. Spring Data Hopper представила функцию Projection
, которая позволила бы ее реализовать, но реализация хранилища Couchbase еще не покрывает ее.
В CouchbaseTemplate
есть что-то близкое, которое имеет метод findByN1QLProjection
, но для этого требуется DTO, посвященный запросу. Например:
SELECT name, lastName FROM #{#n1ql.bucket} WHERE code = $1 AND #{#n1ql.filter}
что эквивалентно (в чистом N1QL) для:
SELECT name, lastName FROM bucketThatBacksRepository WHERE code = $1 AND _class = "com.example.Person"
потребуется следующий класс для работы с findByN1QLProjection
:
public class PersonNameDTO {
private final String name;
private final String lastName;
//constructor and maybe getters/setters needed but omitted here
}
И это будет производить List<PersonNameDTO>
, Обратите внимание, что это не сильно отличается от функции проецирования, о которой я говорил, за исключением того, что она предназначена для интерфейсов, а не для конкретных классов DTO.
Обратите внимание, что вы не должны использовать Spel #{#n1ql.selectEntity}
, так как его назначение состоит в том, чтобы иметь большое предложение SELECT, которое охватывает все поля данного объекта (тогда как здесь вы хотите ограничить предложение SELECT).
Она охватывает также из части с правильным ведром, связанным с вашим хранилищем, но #{#n1ql.bucket}
также охватывает ту часть (и эту часть только) ...
Эта функция будет очень полезна, кажется, что это не возможно атм, но было бы очень приятно включить. – Abbadon