Couchdb Ektorp-@DocumentReference不工作
我是个沙发新手,我发现懒惰很有趣。所以我尝试了一下,但可能是因为我做错了什么,它不起作用,我也不知道是什么错了。我提到过。我得到下面的错误。(我可以单独阅读文档,但不能通过文档引用)。任何帮助都将不胜感激。我使用的是ektorp版本1.4.1Couchdb Ektorp-@DocumentReference不工作,couchdb,ektorp,Couchdb,Ektorp,我是个沙发新手,我发现懒惰很有趣。所以我尝试了一下,但可能是因为我做错了什么,它不起作用,我也不知道是什么错了。我提到过。我得到下面的错误。(我可以单独阅读文档,但不能通过文档引用)。任何帮助都将不胜感激。我使用的是ektorp版本1.4.1 09:51:03.581 [main] DEBUG org.ektorp.impl.StdCouchDbConnector - Querying CouchDb view at /employee/_design/Employee/_view/ektorp
09:51:03.581 [main] DEBUG org.ektorp.impl.StdCouchDbConnector - Querying CouchDb view at /employee/_design/Employee/_view/ektorp_docrefs_addresses?startkey=%5B%22222%22%2C%22addresses%22%5D&endkey=%5B%22222%22%2C%22addresses%22%2C%7B%7D%5D&include_docs=true.
Exception in thread "main" org.ektorp.DocumentNotFoundException: nothing found on db path: /employee/_design/Employee/_view/ektorp_docrefs_addresses?startkey=%5B%22222%22%2C%22addresses%22%5D&endkey=%5B%22222%22%2C%22addresses%22%2C%7B%7D%5D&include_docs=true, Response body: {"error":"not_found","reason":"missing"}
at org.ektorp.http.StdResponseHandler.createDbAccessException(StdResponseHandler.java:40)
at org.ektorp.http.StdResponseHandler.error(StdResponseHandler.java:68)
at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:110)
at org.ektorp.http.RestTemplate.getUncached(RestTemplate.java:27)
at org.ektorp.impl.StdCouchDbConnector.executeQuery(StdCouchDbConnector.java:431)
at org.ektorp.impl.StdCouchDbConnector.queryView(StdCouchDbConnector.java:423)
at org.ektorp.impl.docref.ViewBasedCollection.loadSetResult(ViewBasedCollection.java:69)
at org.ektorp.impl.docref.ViewBasedCollection.loadFromBackReferences(ViewBasedCollection.java:50)
at org.ektorp.impl.docref.ViewBasedCollection.initialize(ViewBasedCollection.java:102)
at
org.ektorp.impl.docref.LazyLoadingViewBasedCollection.invoke(LazyLoadingViewBasedCollection.java:27)
at com.sun.proxy.$Proxy13.size(Unknown Source)
at com.poc.main.Main.main(Main.java:37)
我的测试文件如下
员工文件
{
"_id": "222",
"_rev": "1-32d4d52d4ea11b521b1e366959ce5557",
"name": "Mariamma",
"age": 21
}
地址文件
{
"_id": "ad1",
"_rev": "2-39f3162e0fc63ed5526adda5ae496291",
"employeeId": 222,
"addressLine1": "555 Randolph",
"city": "Chicago"
}
Employee.java
public class Employee extends CouchDbDocument {
private String name;
private int age;
@DocumentReferences(backReference = "employeeId", fetch = FetchType.LAZY, cascade=CascadeType.NONE)
private Set<Address> addresses = new HashSet<Address>();
// getters and setters
}
EmployeeDao.java
public class EmployeeDao {
private final CouchDbConnector db;
public EmployeeDao() {
db = getEmployeeDatabaseConnector();
}
public CouchDbConnector getEmployeeDatabaseConnector() {
HttpClient httpClient = new StdHttpClient.Builder().build();
CouchDbInstance couchDbInstance = new StdCouchDbInstance(httpClient);
CouchDbConnector connector = new StdCouchDbConnector("employee", couchDbInstance);
connector.createDatabaseIfNotExists();
return connector;
}
public Employee read(String employeeId) {
return this.db.get(Employee.class, employeeId);
}
}
Main.java
public class Main {
public static void main(String[] args) {
EmployeeDao dao = new EmployeeDao();
Employee employee = dao.read("222");
System.out.println(employee.getName());
System.out.println(employee.getAddresses().size()); // this line throws error.
}
}
从堆栈跟踪
... Response body: {"error":"not_found","reason":"missing"}
这表明不存在视图/\u设计/Employee/\u视图/ektorp\u docrefs\u地址
更新
讨论视图生成。看起来你不是自己创造出来的,也没有告诉Ektorp为你做这件事
您应该通过扩展CouchDbRepositorySupport
并在其上调用initStandardDesignDocument()
来为Employee
创建存储库类 谢谢你的回复。但是ektorp文档没有提到任何关于创建视图的内容。你是在建议我必须创建一个视图来进行文档引用工作吗?我已经深入研究了文档,并提供了更多细节。
... Response body: {"error":"not_found","reason":"missing"}