我有一个现有的数据存储区实体,如下所示:
@Data
@Entity
public class Data
{
@Id @Index long id;
boolean expired;
}
我需要根据过期的字段过滤数据,因此我必须更改实体以使文件已过期,现在已编入索引。修改后的实体如下:
@Data
@Entity
public class Data
{
@Id @Index long id;
@Index boolean expired;
}
以下是创建索引之前数据存储区中的现有数据:
列:数据
id:1
已过期:真实
id:2
已过期:false
id:3
已过期:false
我的意图是使用objectify获取过期的过滤器数据,所以我修改了我的代码以使用下面的客观化查询:
return (List<Data>) ofy.load().type( Data.class ).filter( "expired = ", false ).list();
它应该返回两个记录,但它什么都不返回。 顺便说一句,在创建索引之后,我在实体中添加了一条新记录,如下所示
id:4
已过期:false
如果我回询,我现在看到一个结果,并且id = 4.似乎过滤器仅适用于新添加的记录,索引dint适用于所有旧记录?如何解决这个问题?
答案 0 :(得分:2)
未返回现有实体的原因是因为您修改了实体类后尚未编制索引.Objectify文档指出:
保存实体时会创建/更新单个属性索引。
要使现有的现有实体实例出现在您的查询中,您必须重新保存它们,这将迫使数据存储区创建其索引。
您必须为每个现有实体执行以下操作: