通过原始数据存储区Objectify查询

时间:2016-01-11 21:57:26

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

我无法理解从JDO到Objectify的升级过程。

所以我有这个课程:

@PersistenceCapable
public class AppUser { 
    /**
     * key from userID
     */
    @PrimaryKey
    @Persistent
    private Key key;

    //...
}

我将其升级为:

@Entity
public class AppUser { 
    /**
     * key from userID
     */
    @Index Key key;
    @Id Long id;

    // ...
}

在更改之前,我可以使用以下方法检索实体:

Key _key = KeyFactory.createKey(AppUser.class.getSimpleName(), user.getUserId());
PersistenceManager pm = PMF.get().getPersistenceManager();
AppUser appUser = pm.getObjectById(AppUser.class, _key);

其中user个对象是AppEngine使用Google帐户引用的用户对象。

如何查询给定用户的实体?当我尝试使用filterKey时,它会产生null对象。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

目前,您的key属性只是一个索引属性,因此您应该可以使用

查询它
ofy().load().type(AppUser.class).filter("key", Key.create(AppUser.class, id)).list();

我觉得这不是您正在寻找的,因为您的id 属于key属性上面的代码示例。此外,Key属性将是对您在第一个代码示例中看不到的另一个实体的引用。所以我假设你真的只想使用id。现在我不知道你的密钥是数字还是字符串,但我认为你正在寻找这样的东西:

@Entity
public class AppUser { 
    @Id Long key; // you can replace Long with String if your ids are strings
}

然后您将按ID查询,如此

ofy().load().type(AppUser.class).id(userIdOrName).list();

或者,密钥查询看起来像这样

ofy().load().key(Key.create(AppUser.class, userIdOrName));