Junjuru Hanmandlu
Junjuru Hanmandlu

Reputation: 51

Custom N1QL query with Couchbase and Spring Boot

I have written a custom repository to get the results using couchbase's N1QL. Here is my code,

    @Override
    public List<Person> findAll(int age) {
        String statement = "select * from bucket_name where _class = 'com.mine.test.model.Person' and age>"+age;
        SimpleN1qlQuery query = N1qlQuery.simple(statement);
        List<Person> list=couchbaseTemplate.findByN1QL(query, Person.class);
        return list;
    }

But I am getting below error,

Unable to retrieve enough metadata for N1QL to entity mapping, have you selected _ID and _CAS?

Any help ?

Upvotes: 1

Views: 1043

Answers (1)

user3289405
user3289405

Reputation: 157

// below code snippet with imports
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.demo.model.User;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

Cluster cluster = CouchbaseCluster.create("127.0.0.1");
        cluster.authenticate("testuser","123456");
        Bucket bucket = cluster.openBucket("jsabucket");
        bucket.bucketManager().createN1qlPrimaryIndex(true, false);

// Inserting records
JsonObject authur = JsonObject.create()
            .put("name","Jake")
            .put("email","[email protected]")
            .put("interets", JsonArray.from("Reading","Swimming"));

    bucket.upsert(JsonDocument.create("u:king_arthur",authur))

//    fetching records
List list = new ArrayList<>();
        N1qlQueryResult result
                = bucket.query(N1qlQuery.simple("SELECT * FROM jsabucket"));
        result.forEach(row -> {
            JsonObject jsonObject = row.value();
            Object doc = jsonObject.get("jsabucket");
            Gson gson = new Gson();
            User user = gson.fromJson(doc.toString(), User.class);
            System.out.println(user);
        });
// User model class
import java.util.List;

public class User {
    private String name;
    private String email;
    private List<String> interests;

    public User() {
    }

    public User(String name, String email, List<String> interests) {
        this.name = name;
        this.email = email;
        this.interests = interests;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<String> getInterests() {
        return interests;
    }

    public void setInterests(List<String> interests) {
        this.interests = interests;
    }
}`enter code here`

Upvotes: 1

Related Questions