Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AppEngine JDO查询未按预期工作_Java_Google App Engine_Jdo - Fatal编程技术网

Java AppEngine JDO查询未按预期工作

Java AppEngine JDO查询未按预期工作,java,google-app-engine,jdo,Java,Google App Engine,Jdo,我正在使用AppEngine,我想查询以下数据实体: 布尔数据“可选”为False 日期“registrationTimestamp”的升序 我的代码: Query query = pm.newQuery(DeviceInfo.class); query.setFilter("optional == False"); query.setOrdering("registrationTimestamp asc"); List<DeviceInfo> datas = (List<

我正在使用AppEngine,我想查询以下数据实体:

  • 布尔数据“可选”为False
  • 日期“registrationTimestamp”的升序
我的代码:

Query query = pm.newQuery(DeviceInfo.class);
query.setFilter("optional == False");
query.setOrdering("registrationTimestamp asc");
List<DeviceInfo> datas = (List<DeviceInfo>)query.execute();
Query Query=pm.newQuery(DeviceInfo.class);
setFilter(“可选==False”);
query.setOrdering(“registrationTimestamp asc”);
List data=(List)query.execute();
当我看到数据时,有数据显示“optional”为True。我想筛选出“可选”为真的条目。setFilter(“可选==False”)似乎不起作用

如何执行所需的查询

编辑

我得到了DataNucleus建议的调试级别的日志

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'
org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints:Bundle“org.datanucleus.jpa”对“org.datanucleus.enhancer”具有可选依赖项,但无法解析
org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints:Bundle“org.datanucleus”对“org.eclipse.equinox.registry”具有可选的依赖关系,但无法解析
org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints:Bundle“org.datanucleus”对“org.eclipse.core.runtime”具有可选的依赖关系,但无法解析
org.datanucleus.PersistenceConfiguration setProperty:Property datanucleus.rdbms.sql.allowAllSQLStatements未知-将被忽略
org.datanucleus.PersistenceConfiguration setProperty:属性datanucleus.rdbms.stringDefaultLength未知-将被忽略
org.datanucleus.PersistenceConfiguration setProperty:属性datanucleus.appengine.autoCreateDatastoreTxns未知-将被忽略
org.datanucleus.ObjectManagerFactoryImpl日志配置:=========================持久性配置===============
org.datanucleus.ObjectManagerFactoryImpl日志配置:datanucleus持久化工厂-供应商:“datanucleus”版本:“1.1.5”
org.datanucleus.ObjectManagerFactoryImpl日志配置:为数据存储URL=“appengine”driver=”“userName=“”初始化datanucleus持久性工厂
org.datanucleus.ObjectManagerFactoryImpl日志配置:===========================================================
org.datanucleus.PersistenceConfiguration setProperty:属性datanucleus.query.cached unknown-将被忽略
org.datanucleus.jdo.metadata.JDOMetaDataManager:为元数据初始化注册侦听器
org.datanucleus.jdo.metadata.JDOAnnotationReader processClassAnnotations:Class“net.xxxxxxxxx.xxxxxxx.server.DeviceInfo”已与jdo注释一起指定,因此使用这些注释。
org.datanucleus.store.appengine.MetaDataValidator验证:对net.xxxxxxxxx.xxxxxx.server.DeviceInfo执行appengine特定的元数据验证
org.datanucleus.store.appengine.MetaDataValidator验证:已完成对net.xxxxxxxxx.xxxxxx.server.DeviceInfo执行特定于appengine的元数据验证
org.datanucleus.store.StoreDataManager注册表storedata:管理类的持久性:net.xxxxxxxxx.xxxxxxx.server.DeviceInfo[表:
,继承祖先策略:新表]
org.datanucleus.store.StoreDataManager注册表storedata:管理类的持久性:net.xxxxxxxxx.xxxxxxx.server.DeviceInfo[表:
,继承祖先策略:新表]
org.datanucleus.jdo.metadata.JDOMetaDataManager$MetaDataRegisterClassListener registerClass:侦听器找到了可持久类net.xxxxxxxx.xxxxxxx.server.DeviceInfo的初始化
com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning:此查询没有在FetchOptions中设置块大小,返回了1000多个结果。如果此大小的结果集对于该查询是常见的,请考虑设置块大小以提高性能。
要禁用此警告,请在appengine-web.xml中设置以下系统属性(该属性的值无关紧要):“appengine.datastore.disableChunkSizeWarning”

通过直接黑客

optional = false 

应工作,应考虑按

适当添加过滤器。
希望能有所帮助

,日志上说查询结果如何?@DataNucleus,当setFilter或setOrdering不被接受时,我发现索引找不到异常。但对于问题中显示的查询,我没有得到异常,没有错误日志。但我确实在查询结果中看到了“optional==True”数据。因此,我认为setFilter不起作用。日志会告诉您使用的是什么低级查询。@DataNucleus,日志说:com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning:此查询在FetchOptions中没有设置块大小,返回了1000多个结果。如果此大小的结果集对于该查询是常见的,请考虑设置块大小以提高性能。要禁用此警告,请在appengine-web.xml中设置以下系统属性(该属性的值无关紧要):“appengine.datastore.disableChunkSizeWarning”,但不显示查询信息。调试时,我在调试级别显示日志您提供的是低级数据存储API。我想改用JDO。
Query q = new Query("DeviceInfo")
            .addFilter("optional",
                       Query.FilterOperator.EQUAL,
                       false);