什么会导致“a”;java.lang.IllegalArgumentException:类型不匹配“;在GAE查询中?

什么会导致“a”;java.lang.IllegalArgumentException:类型不匹配“;在GAE查询中?,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我有两个代码片段,我正试图在Google App Engine SDK v1.8.8 for Java的开发服务器上运行 第一: return datastore.get(KeyFactory.createKey(Kinds.Provider,provider_id)); 按预期工作,并从数据存储返回提供程序实体 但当我试图将其更改为投影查询时,它将只返回 Filter filter=new FilterPredicate(Entity.KEY_RESERVED_PROPERTY,

我有两个代码片段,我正试图在Google App Engine SDK v1.8.8 for Java的开发服务器上运行

第一:

return datastore.get(KeyFactory.createKey(Kinds.Provider,provider_id));
按预期工作,并从数据存储返回提供程序实体

但当我试图将其更改为投影查询时,它将只返回

Filter filter=new FilterPredicate(Entity.KEY_RESERVED_PROPERTY,
                                  Query.FilterOperator.EQUAL,
                                  KeyFactory.createKey(Kinds.Provider,provider_id));
Query q = new Query(Kinds.Provider)
            .setFilter(filter)
    .addProjection(new PropertyProjection("address", String.class))
        .addProjection(new PropertyProjection("last_modified", String.class));;
    }
PreparedQuery pq = datastore.prepare(q);
log.info("query:" + q.toString());

Entity result = pq.asSingleEntity();
我收到了以下例外情况的通知:

java.lang.IllegalArgumentException: Type mismatch.
    at com.google.appengine.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:96)
    at com.google.appengine.api.datastore.RawValue.asType(RawValue.java:61)
    at com.google.appengine.api.datastore.PropertyProjection.getValue(PropertyProjection.java:65)
    at com.google.appengine.api.datastore.EntityTranslator.createFromPb(EntityTranslator.java:29)
    at com.google.appengine.api.datastore.QueryResultsSourceImpl.processQueryResult(QueryResultsSourceImpl.java:199)
    at com.google.appengine.api.datastore.QueryResultsSourceImpl.loadMoreEntities(QueryResultsSourceImpl.java:106)
    at com.google.appengine.api.datastore.QueryResultIteratorImpl.ensureLoaded(QueryResultIteratorImpl.java:155)
    at com.google.appengine.api.datastore.QueryResultIteratorImpl.nextList(QueryResultIteratorImpl.java:110)
    at com.google.appengine.api.datastore.LazyList.forceResolveToIndex(LazyList.java:93)
    at com.google.appengine.api.datastore.LazyList.resolveToIndex(LazyList.java:73)
    at com.google.appengine.api.datastore.LazyList.resolveToIndex(LazyList.java:56)
    at com.google.appengine.api.datastore.LazyList.isEmpty(LazyList.java:260)
    at com.google.appengine.api.datastore.PreparedQueryImpl.asSingleEntity(PreparedQueryImpl.java:74)
记录querys.toString()的yeilds:

你知道这个异常的原因吗?

好的,找到了

在DB中,last_modified实际上是一个
Long
,因此应该是

.addProjection(new PropertyProjection("last_modified", Long.class));

感谢您的收听,我希望这可能会对将来的人有所帮助。

谢谢您的两条评论。修正了标题,使Q更具体。不,现在看起来不错。:)噪音已删除。。
.addProjection(new PropertyProjection("last_modified", Long.class));