我想使用仅密钥查询来检查数据库中是否存在cert实体。到目前为止,我正在做:
Iterable<Key<LikeMW>> liked = ofy().load().type(LikeMW.class).filter("likedObject", postKey).filter("user", userKey).keys();
post.setLiked(liked.iterator().hasNext());
所以我有两个问题:
1 - 如果我使用&#34; .first()。now()&#34;在&#34; .keys()&#34;之后,它是否从&#34;仅键切换到#34;或者它仍然只是一个&#34; key-only&#34;查询吗
2 - 是否有更好的方法来检查是否存在使用&#34; key-only&#34;查询和过滤?
谢谢你们!
UPDATING
@Entity
public class LikeMW {
@Id
private Long id;
@JsonIgnore
@Index
@Load
private Ref<UserMW> user;
@JsonIgnore
@Index
private Key likedObject;
...
}
其中一个可能喜欢的物品......
@Entity
public class PostMW{
@Id
private Long id;
@JsonIgnore
@Load
private Ref<UserMW> owner;
@JsonIgnore
@Load
private Ref<MediaMW> media;
...
}
答案 0 :(得分:1)
权威地查找实体是否存在的唯一方法是按密钥加载它。您当然可以执行仅限密钥查询,但它最终会保持一致,并且不能保证您不会创建重复项。
考虑到你要做的事情,你几乎肯定会更好地与用户一起养育LikeMW
并使用字符串化的LikeObject作为字符串id。这样,您就可以进行强烈一致的查找和使用事务。