1

我正在使用spring-data-couchbase 2.1.2,我用自定义查询重新定义了一个存储库:

@Override
public List<PortfolioDocument> searchPortfolio() {

    CouchbaseOperations template = templateProvider.resolve(PortfolioRepository.class, PortfolioDocument.class); 

    String statement = "select META(ipdb).id AS _ID, META(ipdb).cas AS _CAS, * " + 
        "from ipdb where _class = 'com.ipdb.datamodel.document.PortfolioDocument' AND  title = 'dummytitle'";
    SimpleN1qlQuery query = N1qlQuery.simple(statement);;
    List<PortfolioDocument> portfolioDocuments = template.findByN1QL(query, PortfolioDocument.class);

    ....
}

template.findByN1QL(query, PortfolioDocument.class);返回一些PortfolioDocument除了 id 属性之外的所有属性为 null。如果我调用template.findByOne(id);生成的对象就可以了。你能帮我吗?

4

1 回答 1

3

我找到了解决方案。正确的查询是:

SELECT META(`ipdb`).id AS _ID, META(`ipdb`).cas AS _CAS, `ipdb`.* FROM `ipdb` WHERE ...

最好的做法是使用 的方法N1qlUtils,可以看下面的例子:

Statement statement = N1qlUtils.createSelectClauseForEntity(template.getCouchbaseBucket().name()).
  from(Expression.i(template.getCouchbaseBucket().name()))
    .where(".....");

createSelectClauseForEntityfrom方法构建查询的一部分。

于 2016-07-17T10:51:57.673 回答