【问题标题】:While using projection query in GAE datastore, null is returned instead of a String value (Java)在 GAE 数据存储中使用投影查询时,返回 null 而不是字符串值 (Java)
【发布时间】:2017-03-01 01:01:15
【问题描述】:

我正在处理 GAE 数据存储的投影查询。

我有一个用例,我只需要从数据存储区中的某个属性下获取不同的值。

投影查询似乎在工作,但它返回的结果为 null 而不是实际值。

以下是一段代码:

Query q = new Query(user.getEmail() + "_" + job);
    q.addProjection(new PropertyProjection(prop, String.class));
    q.setDistinct(true);

    PreparedQuery pq = datast.prepare(q);
    String elements[] = new String[1000];
    int i=0;
    String s="";
    for (Entity result : pq.asIterable()) {
          elements [i] = (String) result.getProperty("" + prop);
          //i++;
          s = s + elements[i] + ",";
          resp.getWriter().println(elements[i]);
          i++;
        }

“元素”数组具有不同的计数,但包含“空”而不是实际的字符串值。

请指教。

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    来自文档:

    只能投影索引属性。

    未编入索引的属性不支持投影, 无论是显式还是隐式。 (长文本字符串(Text)和长 字节字符串(Blob)没有被索引)。

    根据您的描述,该属性似乎未编入索引。

    【讨论】:

    • 感谢@Andrei Volgin,我已经索引了所有属性,但它没有返回值,实际上我得到了确切的结果计数,即假设一种下有 3 个不同的值,循环运行正好 3 次,但在数组中获取的值包含 null。获取投影查询是否有问题?
    • 索引属性后是否重新保存了所有实体?
    • 不,我没有,请您指导整个过程
    • 所有属性只有在保存实体时才会被索引。因此,如果您在保存实体后更改了代码,则需要重新保存它才能使索引正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多