数据存储区查询返回null

时间:2014-02-17 06:50:19

标签: google-app-engine google-cloud-datastore objectify

我正在尝试从数据存储区“User”类型的实体中检索玩家得分的排序列表 执行后:

 List<User> entities = ofy().load().type(User.class).order("-score").list();

知道我已将“得分”属性编入索引。 这是“User.class”

@Id String userName;
     String password;
    @Index int score;

实体似乎是空的,我无法得到实体细节。我错过了什么?

我仍在努力,我设法将方法修改为:

 @Override
  public User display(){
     List<User> list = ofy().load().type(User.class).order("-score").limit(5).list();
     User u= list.get(list.size()-1);
      if(!u.getUserName().equals(null))  
        return  u;
      return null;
  }

我设法通过检查用户名字段来摆脱“null”值,但无论我如何更改list.get(index),返回值始终是实体中的第一个用户。我尝试了不同的索引值但是始终收到第一个用户,无法检索其他用户。 希望得到一个可以解决问题的答案。

实体存储在数据库中,如下所示:

public User registerAccount(String username, String password,String confirm) {
        User user = ofy().load().type(User.class).id(username).get();



        if(user == null){
            if(password.contains(" "))          
                return null;            
            if(password.compareTo(confirm)!=0)
                return null;

            else{
            user = new User(username,password,0);
            ofy().save().entity(user).now();
            return user;
            }
         }

        else
        {
            return null;
        }
  } 

使用ofy()时遇到任何问题.save()...而不是datastore.put()... 我想知道这是否会影响,因为在数据存储索引中找不到分数。

1 个答案:

答案 0 :(得分:1)

一个可能的原因是“得分”属性的@Index注释从一开始就不存在。更新前添加的用户无法通过.order(“ - score”)命令获取。

另一种可能的事情是微不足道但很常见!这是你的班级命名(“用户”)。你有正确的进口吗? GAE还有一个非常常见的com.google.appengine.api.users.User类用于身份验证。