Reputation: 51
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
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