Objectify 为什么这个按id进行的对象化查询没有';返回结果
我发布了hole jsf方法,但最重要的一行是: Food-Food=ofy().load().type(Food.class).id(lng.now() 实体食品:Objectify 为什么这个按id进行的对象化查询没有';返回结果,objectify,Objectify,我发布了hole jsf方法,但最重要的一行是: Food-Food=ofy().load().type(Food.class).id(lng.now() 实体食品: @Entity public class Food implements Serializable { private static final long serialVersionUID = 1L; @Id Long id; @Parent @Load Key<TableParent> ow
@Entity
public class Food implements Serializable {
private static final long serialVersionUID = 1L;
@Id Long id;
@Parent @Load Key<TableParent> owner;
@Index String name;
String description;
byte[] image;
@Load Ref<Category> category;
public Food () {
}
@实体
公共类食品实现可序列化{
私有静态最终长serialVersionUID=1L;
@Id长Id;
@父@加载密钥所有者;
@索引字符串名称;
字符串描述;
字节[]图像;
@负载参考类别;
公共食品(){
}
是的。它有父项,但我不在这里发布它,因为这个父项不应该在简单的ID查询中使用。我确信该ID存在,并且真的看不到返回总是null的原因。这可能是一致性问题,但我在同一个项目上反复进行此查询。在同一个本地工作并部署到google app engine-对于已存在数小时的对象,始终返回null。如果没有父项,则无法访问具有父项的实体。我无法仅通过Id访问实体,因为可能存在具有相同Id但具有其他父项的其他实体。因此,在此类查询中必须使用父项:
Food food = ofy().cache(false).load().key(Key.create(Key.create(TableParent.class, parent.getId()), Food.class, lng)).now();
这将完成作业如果没有父项,则无法访问具有父项的实体。我无法仅通过Id访问实体,因为可能存在其他具有相同Id但具有其他父项的实体。因此,在此类查询中必须使用父项:
Food food = ofy().cache(false).load().key(Key.create(Key.create(TableParent.class, parent.getId()), Food.class, lng)).now();
这就完成了任务在GAE中无法按id进行查询,除非您显式创建一个单独的索引字段,并复制id值。但请记住,id仅在父范围内是唯一的,因此它可能不会执行您想要的操作 Objectify的load by id是一个load by key操作。您的示例:
ofy().load().type(Food.class).id(lng).now();
这只是一个快捷方式:
ofy().load().key(Key.create(Food.class, lng)).now();
现在,您可以了解为什么还需要添加.parent()调用。在GAE中无法按id进行查询,除非您使用复制的id值显式创建一个单独的索引字段。但请记住,id仅在父范围内是唯一的,因此它可能无法满足您的需要 Objectify的load by id是一个load by key操作。您的示例:
ofy().load().type(Food.class).id(lng).now();
这只是一个快捷方式:
ofy().load().key(Key.create(Food.class, lng)).now();
现在您可以了解为什么还需要添加.parent()调用