Reputation: 1081
How do I retrieve an array of JSON objects stored in a couchbase document and store it in its respective list, say List<ProjectSummary>
using spring-data
?
Below is the content of the document named 'project-summary' on 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"
}
]
When I try to retrieve it using as follows-
public interface ProjectSummaryRepository extends CrudRepository<List<ProjectSummary>, String>{}
//within main method
Optional<List<ProjectSummary>> summaries = projectSummaryRepo.findById(COUCHBASE_DOCUMENT_ID);
i get an exception saying -
java.lang.ClassCastException: org.springframework.data.couchbase.core.mapping.CouchbaseList cannot be cast to org.springframework.data.couchbase.core.mapping.CouchbaseDocument
I have annotated my document class as below -
@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
}
Upvotes: 0
Views: 794
Reputation: 2460
Using findById can't be used in this scenario. You have to use SpringData DSL to query your data:
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)
}
After that you can simply call those methods inside your code;
List<ProjectSummary> sumaries = projectSummaryRepo.findByTitleAndStatus("someTitle", "someStatus")
List<ProjectSummary> sumaries2 = projectSummaryRepo.findWithSomeComplexQuery("someStatus", "someTitle", "owner123" )
Upvotes: 2