2013-05-12 4 views
0

예상대로 작동하지 않습니다와 내가 함께 데이터 엔티티를 조회 할 :AppEngine에 JDO 쿼리 I AppEngine에 함께 일하고 있어요

  • BOOL 데이터 '를 선택하면'False입니다.
  • 'registrationTimestamp'날짜의 오름차순입니다.

내 코드 : 나는 datas를 볼 때

Query query = pm.newQuery(DeviceInfo.class); 
query.setFilter("optional == False"); 
query.setOrdering("registrationTimestamp asc"); 
List<DeviceInfo> datas = (List<DeviceInfo>)query.execute(); 

이 '선택'에 데이터가 있습니다은 True입니다. '선택 사항'이 True 인 항목을 필터링 아웃하려고합니다. setFilter ("optional == False")가 작동하지 않는 것 같습니다.

내가 원하는 쿼리를 어떻게 수행 할 수 있습니까?

편집 나는 DataNucleus에 의해 권장 DEBUG 레벨 로그인 얻었다.

org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints: Bundle "org.datanucleus.jpa" has an optional dependency to "org.datanucleus.enhancer" but it cannot be resolved 
org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints: Bundle "org.datanucleus" has an optional dependency to "org.eclipse.equinox.registry" but it cannot be resolved 
org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints: Bundle "org.datanucleus" has an optional dependency to "org.eclipse.core.runtime" but it cannot be resolved 
org.datanucleus.PersistenceConfiguration setProperty: Property datanucleus.rdbms.sql.allowAllSQLStatements unknown - will be ignored 
org.datanucleus.PersistenceConfiguration setProperty: Property datanucleus.rdbms.stringDefaultLength unknown - will be ignored 
org.datanucleus.PersistenceConfiguration setProperty: Property datanucleus.appengine.autoCreateDatastoreTxns unknown - will be ignored 
org.datanucleus.ObjectManagerFactoryImpl logConfiguration: ================= Persistence Configuration =============== 
org.datanucleus.ObjectManagerFactoryImpl logConfiguration: DataNucleus Persistence Factory - Vendor: "DataNucleus" Version: "1.1.5" 
org.datanucleus.ObjectManagerFactoryImpl logConfiguration: DataNucleus Persistence Factory initialised for datastore URL="appengine" driver="" userName="" 
org.datanucleus.ObjectManagerFactoryImpl logConfiguration: =========================================================== 
org.datanucleus.PersistenceConfiguration setProperty: Property datanucleus.query.cached unknown - will be ignored 
org.datanucleus.jdo.metadata.JDOMetaDataManager <init>: Registering listener for metadata initialisation 
org.datanucleus.jdo.metadata.JDOAnnotationReader processClassAnnotations: Class "net.xxxxxxxxx.xxxxxxx.server.DeviceInfo" has been specified with JDO annotations so using those. 
org.datanucleus.store.appengine.MetaDataValidator validate: Performing appengine-specific metadata validation for net.xxxxxxxxx.xxxxxx.server.DeviceInfo 
org.datanucleus.store.appengine.MetaDataValidator validate: Finished performing appengine-specific metadata validation for net.xxxxxxxxx.xxxxxx.server.DeviceInfo 
org.datanucleus.store.StoreDataManager registerStoreData: Managing Persistence of Class : net.xxxxxxxxx.xxxxxxx.server.DeviceInfo [Table : <class name="DeviceInfo" 
     identity-type="application" 
     objectid-class="javax.jdo.identity.ObjectIdentity" 
     persistence-modifier="persistence-capable" 
> 
<inheritance strategy="new-table"> 
</inheritance> 
<field name="deviceRegistrationID" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="gcm" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="key" 
     persistence-modifier="persistent" 
     primary-key="true" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="false" 
     unique="false"> 
</field> 
<field name="optional" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="registrationTimestamp" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
</class> 
, InheritanceStrategy : new-table] 
org.datanucleus.store.StoreDataManager registerStoreData: Managing Persistence of Class : net.xxxxxxxxx.xxxxxxx.server.DeviceInfo [Table : <class name="DeviceInfo" 
     identity-type="application" 
     objectid-class="javax.jdo.identity.ObjectIdentity" 
     persistence-modifier="persistence-capable" 
> 
<inheritance strategy="new-table"> 
</inheritance> 
<field name="deviceRegistrationID" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="gcm" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="key" 
     persistence-modifier="persistent" 
     primary-key="true" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="false" 
     unique="false"> 
</field> 
<field name="optional" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
<field name="registrationTimestamp" 
     persistence-modifier="persistent" 
     null-value="none" 
     default-fetch-group="true" 
     embedded="true" 
     unique="false"> 
</field> 
</class> 
, InheritanceStrategy : new-table] 
org.datanucleus.jdo.metadata.JDOMetaDataManager$MetaDataRegisterClassListener registerClass: Listener found initialisation for persistable class net.xxxxxxxxx.xxxxxxx.server.DeviceInfo 
com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning: This query does not have a chunk size set in FetchOptions and has returned over 1000 results. If result sets of this size are common for this query, consider setting a chunk size to improve performance. 
    To disable this warning set the following system property in appengine-web.xml (the value of the property doesn't matter): 'appengine.datastore.disableChunkSizeWarning' 
+0

도움이되기를 바랍니다 및 로그 대해 무엇을 말한다합니다 쿼리? – DataNucleus

+0

@DataNucleus, setFilter 또는 setOrdering을 사용할 수없는 경우 색인을 찾을 수 없습니다. 그러나 질문에 표시된 쿼리를 사용하면 예외가 발생하지 않으며 오류 로그도 표시되지 않습니다. 그러나 실제로 쿼리 결과에 "optional == True"데이터가 표시됩니다. 그래서 setFilter가 작동하지 않는다고 생각합니다. – Tomcat

+0

로그는 사용 된 낮은 수준의 쿼리를 알려줍니다. – DataNucleus

답변

0

직접 해킹

optional = false 

일을해야하지만, 당신은 documentation

Query q = new Query("DeviceInfo") 
      .addFilter("optional", 
         Query.FilterOperator.EQUAL, 
         false); 

에 따라 적절하게 필터를 추가하는 것을 고려가

+0

당신이 제공 한 것은 저수준 데이터 저장소 API입니다. 대신 JDO를 사용하고 싶습니다. – Tomcat