2016-07-16 20 views
1

Ich verwende spring-data-couchbase 2.1.2, neu definiert ich ein Repository mit einer benutzerdefinierten Abfrage:Frühling Daten benutzerdefinierte N1QL Abfrage gibt Eigenschaft Dokument auf null

@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); kehrt einige PortfolioDocument mit allen Eigenschaft auf null mit Ausnahme der ID-Eigenschaft. Wenn ich template.findByOne(id); aufrufen, ist das resultierende Objekt in Ordnung. Können Sie mir bitte helfen?

Antwort

3

Ich habe eine Lösung gefunden. Die richtige Frage ist:

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

Die bewährte Methode ist es, die Methoden der N1qlUtils zu verwenden, können Sie sich das Beispiel unten aussehen:

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

createSelectClauseForEntity und from Methoden, um den einen Teil der Abfrage zu erstellen.