2017-09-27 14 views
0

Wie ich zwei .contains in einer einzelnen Abfrage in Google Datastore verwendet. mein Code:Wie verwende ich zwei enthält im Datenspeicher Abfrage

Query query = pm.newQuery("SELECT DISTINCT actualUserEmail FROM packageName :p.contains(actualUserEmail) && :p.contains(OrgUnitPath)"); 

result = (List) query.executeWithArray(Arrays.asList(data),Arrays.asList(test)); 

System.out.println("result ="+result.size()); 

List tempResult = new ArrayList(); 
tempResult.addAll(result); 
return tempResult; 

ich erhalte enthält nur das erste Ergebnis. Wie ich zwei benutze enthält in Einzelabfrage.

+0

und welche Abfrage ist es AUSFÜHREND? wie vielleicht sehen Sie sich das LOG ... – DN1

+0

so zurück zu meiner Frage, und beantworten Sie es? Vielleicht unterstützt Google's Datenspeicher so etwas nicht? oder vielleicht Googles Plugin nicht. Oder vielleicht finden Sie im LOG die Antwort auf diese Frage. Aber die Tatsache ist, dass Sie das LOG suchen müssen, um herauszufinden, – DN1

Antwort

0

JDO mit App-Engine Datastore verhalten sich sehr unberechenbar. Appengine Datastore API, ist eine bessere Alternative. Hier ist eine TESTED & TRUSTED-Methode, bei der mehrere contains (oder IN-Operatoren) in einer Datenspeicherabfrage enthalten sein müssen. Statt JDO, ich habe es google appengine Datenspeicher-API verwenden:

Beispiel würde wie folgt aussehen:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
     Filter property1Filter = new FilterPredicate("property1", FilterOperator.EQUAL, value1); 
     Filter property2Filter =new FilterPredicate("property2", FilterOperator.IN, valueList1); 
     Filter property3Filter =new FilterPredicate("property3", FilterOperator.IN, valueList2); 
     Filter compositeFilter= CompositeFilterOperator.and(property1Filter, property2Filter); 
     compositeFilterExtended=CompositeFilterOperator.and(compositeFilter, property3Filter); 
     com.google.appengine.api.datastore.Query gaeQuery = new Query("DatastoreKind").setFilter(compositeFilterExtended); 

     PreparedQuery pq = datastore.prepare(gaeQuery); 
     List<Entity> entities = pq.asList(FetchOptions.Builder.withDefaults());  
     return entities; 

Hoffnung, das hilft.

+0

Danke für die Hilfe, die ich bekam Antwort –

+0

Akash, gut, Die Änderung, die Sie getan haben, sollte es funktioniert aber immer noch, habe ich beobachtet, dass JDO Operator/Funktion 'enthält' scheint mit App Engine Cloud Datastore nur mit einer Liste von Zeichenfolgen arbeiten, nicht mit Zahlen wie Integer. Selbst wenn Sie eine einzelne Liste von Ganzzahlen verwenden, kann JDO die Abfrage für App Engine nicht ausführen. –

0

Ich habe Antwort ich machte eine Änderung p & P1 in Abfrage funktioniert gut.

Query query = pm.newQuery("SELECT DISTINCT actualUserEmail FROM packageName :p.contains(actualUserEmail) && :p1.contains(OrgUnitPath)"); 
result = (List) query.executeWithArray(Arrays.asList(data),Arrays.asList(test)); 

System.out.println("result ="+result.size()); 

List tempResult = new ArrayList(); 
tempResult.addAll(result); 
return tempResult; 
Verwandte Themen