客观化仅限键查询?

时间:2016-11-16 21:38:17

标签: java google-cloud-datastore objectify

我想使用仅密钥查询来检查数据库中是否存在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;

    ...
}

1 个答案:

答案 0 :(得分:1)

权威地查找实体是否存在的唯一方法是按密钥加载它。您当然可以执行仅限密钥查询,但它最终会保持一致,并且不能保证您不会创建重复项。

考虑到你要做的事情,你几乎肯定会更好地与用户一起养育LikeMW并使用字符串化的LikeObject作为字符串id。这样,您就可以进行强烈一致的查找和使用事务。