2017-09-27 6 views
0

Google Datastoreの1つのクエリで2つの.containsを使用する方法。 私のコード:私は最初に取得していますどのように私はデータストアのクエリで2つのcontainsを使用する

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; 

は、結果が含まれています。私はどのように2つの単一のクエリに含まれて使用します。

+0

とはどのようなクエリですか?おそらくログを見てみると... – DN1

+0

私の質問に戻り、それに答える?たぶん、Googleのデータストアはそのようなものをサポートしていませんか?またはおそらくGoogleのプラグインはそうではありません。あるいは、LOGでその質問に対する答えを見つけることができます。しかし実際にはあなたはLOGを見て調べる必要があります – DN1

答えて

0

App Engine Datastoreを使用したJDOは、予測不可能な動作をします。 Appengine Datastore APIが優れています。 データストアのクエリに複数のcontains(またはIN演算子)を使用するというTRUSTEDの方法を試しました。&代わりにJDOの、私はGoogleのAppEngineのデータストアのAPIを使用して、それをやった:

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; 

・ホープこのことができますが:

サンプルは次のようになります。

+0

助けてくれてありがとう私は答えを得ました –

+0

Akash、Good、あなたがした変更は、それを動作させるはずですが、まだ、JDO演算子/関数 'contains' Integerのような数字ではなく、文字列のリストでのみ動作するように、App Engine Cloud Datastoreを使用します。単一のIntegerリストを使用しても、JDOはApp Engineのクエリを実行できません。 –

0

私は1つの変更p & p1をうまくいきました。

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; 
関連する問題