Получение массива json объектов, хранящихся в документе couchbase | весна - PullRequest
0 голосов
/ 13 февраля 2020

Как получить массив JSON объектов, хранящихся в документе couchbase, и сохранить его в соответствующем списке, скажем, List<ProjectSummary>, используя spring-data?

Ниже приведено содержимое документа с именем 'project-summary' на couchbase -

[
    {
        "id": "1",
        "title": "New API",
        "owner_id": "dsdssdsd445d",
        "description": "Yh A Testin API",
        "status": "unactiveAPI"
    },
    {
        "id": "2",
        "title": "New TW Projec API",
        "owner_id": "dsdssdsd445d",
        "description": "Testin API",
        "status": "unactiveAPI"
    },
    {
        "id": "3",
        "title": "Projec API",
        "owner_id": "dsdssdsd445d",
        "description": "Testin",
        "status": "unactiveAPI"
    }
]

Когда я пытаюсь получить его, используя следующее -

public interface ProjectSummaryRepository extends CrudRepository<List<ProjectSummary>, String>{}

//within main method
Optional<List<ProjectSummary>> summaries = projectSummaryRepo.findById(COUCHBASE_DOCUMENT_ID);

, я получаю исключение, говорящее -

java .lang.ClassCastException: org.springframework.data.couchbase.core.mapping.CouchbaseList не может быть приведен к org.springframework.data.couchbase.core.mapping.CouchbaseDocument

У меня есть аннотировал мой класс документа, как показано ниже -

@Document
public class ProjectSummary implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    private String id;
    @Field
    private String title;
    @Field
    private String owner_id;
    @Field
    private String status;
    @Field
    private String description;

    //getters and setters
}

1 Ответ

2 голосов
/ 13 февраля 2020

Использование findById не может быть использовано в этом сценарии. Вы должны использовать SpringData DSL для запроса ваших данных:

public interface ProjectSummaryRepository extends CrudRepository<List<ProjectSummary>, String> {

   //using standard Spring Data DSL
   List<ProjectSummary> findByTitleAndStatus(String title, String status)

   //complex query using N1QL syntax
   @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and status = $1 and ( title  = $2 or owner_id = $3)")
   List<ProjectSummary> findWithSomeComplexQuery(String status, String title, String owner_id)
 }

После этого вы можете просто вызывать эти методы внутри своего кода;

  List<ProjectSummary> sumaries = projectSummaryRepo.findByTitleAndStatus("someTitle", "someStatus")

  List<ProjectSummary> sumaries2 = projectSummaryRepo.findWithSomeComplexQuery("someStatus", "someTitle", "owner123" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...