我正在使用Objectify在Google App Engine上创建简单的后端,可以存储用户和他们的食谱。 模特看起来像这样: 用户有很多食谱,每个食谱都有一个作者。
我希望能够:
根据指南,我已经这样做了:
@Entity
public class User {
@Id
private Long id;
@Index
private String name;
List<Recipe> recipes = new ArrayList<>();
/* Other fields */
}
和食谱:
@Entity
public class Recipe {
@Id
Long id;
String name;
@Index
@Load
Ref<User> author;
/* Other fields */
}
我将Recipe与作者(用户对象)保存在其中。
和2.要求工作正常, 但当我试图让用户得到这样的所有食谱时:
public User get(@Named("id") long id) throws NotFoundException {
User user = ofy().load().type(User.class).id(id).now();
if (user == null) {
throw new NotFoundException("Could not find User with ID: " + id);
} else {
List<Recipe> recipes = ofy().load().type(Recipe.class).filter("author", user).list();
account.recipes = recipes;
}
return account;
}
我得到空的食谱清单。 我做错了什么?
答案 0 :(得分:0)
author
中的Recipe
属性是Ref
,基本上是Key
,因此您需要对该密钥进行过滤,如下所示:
List<Recipe> recipes = ofy().load().type(Recipe.class).filter("author =", Key.create(user)).list();
顺便说一句,不是使用.now()
,而是检查null
,然后抛出异常,您可以使用.safe()
为您做同样的事情。