我无法理解从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对象。
提前谢谢。
答案 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));