我正在研究一个将在Google Appengine上部署的简单费用管理器。我将objectify用作Appengine ORM。现在的问题是我无法从数据存储中获取简单的对象。这里的会话始终为空!但是,当我在localhost数据存储中签出它时,我可以看到它在那里!

@Override
public String findEmailBySessionId(String sid) {
    Session session = datastore.load().type(Session.class).id(sid).now();
    if (session != null && (session.getDate().after(new Date()) || session.isToBeRemembered())) {
        return session.getEmail();
    }   // this is always null !
    return null;
}




@Entity
public class Session {


    private String email;

    @Id
    private String sessionId;

    private Date date;

    private boolean toBeRemembered;

    @Parent
    private Key<User> parent;
.........
}




@Entity
public class User {

    @Id
    private String email;

    private String name;
    private String password;
    private Date dateOfBirth;
    private String hashSalt;

    public User() {
    }

最佳答案

好的,我知道了答案,这很愚蠢。这实际上是非常愚蠢的。

在Google文档中,对查询的限制为:

*对未索引的属性进行过滤不会返回任何结果! * link
为了使objectify索引一个属性,该属性应使用@Index注释进行注释。
在上面的代码中,我忘了在@cc上加上@Index注释!这就是问题所在。将注释放回原处后,一切恢复正常。

关于java - 无法使用Objectify从数据存储中获取对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21589897/

10-09 01:14