0
我與AppEngine上工作,我想查詢的數據實體:的AppEngine JDO查詢不按預期工作
- 布爾數據「可選」是假。
- 日期'registrationTimestamp'的升序。
我的代碼:
Query query = pm.newQuery(DeviceInfo.class);
query.setFilter("optional == False");
query.setOrdering("registrationTimestamp asc");
List<DeviceInfo> datas = (List<DeviceInfo>)query.execute();
當我看到DATAS,有與 '可選' 的數據是真實的。我想過濾掉'可選'爲真的條目。看來setFilter(「可選==假」)不起作用。
如何執行我想要的查詢?
編輯
我日誌與由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'
和日誌說怎麼樣查詢? – DataNucleus 2013-05-13 10:14:09
@DataNucleus,當setFilter或setOrdering未被接受時,我找不到索引的異常。但在問題中顯示的查詢中,我沒有得到異常,沒有錯誤日誌。但是我真的在查詢結果中看到「可選==真」數據。所以我認爲setFilter不起作用。 – Tomcat 2013-05-14 03:27:15
日誌告訴你使用了什麼低級別的查詢。 – DataNucleus 2013-05-14 04:29:15