Java Spring数据自定义N1QL查询将属性文档返回为null

Java Spring数据自定义N1QL查询将属性文档返回为null,java,spring-data,couchbase,n1ql,spring-data-couchbase,Java,Spring Data,Couchbase,N1ql,Spring Data Couchbase,我使用的是spring data couchbase 2.1.2,我用一个自定义查询重新定义了一个存储库: @Override public List<PortfolioDocument> searchPortfolio() { CouchbaseOperations template = templateProvider.resolve(PortfolioRepository.class, PortfolioDocument.class); String st

我使用的是
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);

    ....
}
@覆盖
公共列表搜索组合(){
CouchbaseOperations template=templateProvider.resolve(PortfolioRepository.class,PortfolioDocument.class);
String statement=“选择META(ipdb).id作为_id,META(ipdb).cas作为_cas,*”+
“来自ipdb,其中_class='com.ipdb.datamodel.document.PortfolioDocument'和title='dummytitle'”;
SimpleN1qlQuery query=N1qlQuery.simple(语句);;
List portfolioDocuments=template.findByN1QL(查询,PortfolioDocument.class);
....
}
template.findByN1QL(查询,PortfolioDocument.class)
返回一些
PortfolioDocument
,其中除id属性外的所有属性均为null。 如果我调用
template.findByOne(id)结果对象正常。

你能帮帮我吗?

我找到了解决办法。正确的查询是:

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(".....");
createSelectClauseForEntity
from
方法构建查询的a部分