通过具有父项的键列表来对对象进行客观化

时间:2016-01-12 15:44:26

标签: google-app-engine google-cloud-datastore objectify

我想通过Google App Engine(Objectify)创建一个Api方法,该方法返回我关注的人员帖子的CollectionResponse,按日期降序排序。

我有一个实体Post和实体Profile,两者都以Long id为密钥。

Post实体具有以下属性,指定它具有父级:

@Parent
private Key<Profile> profileKey;

Profile实体具有以下属性,其中存储了该个人资料所关注人员的Listid

// Ids of the profiles this person follows
private List<Long> following = new ArrayList<>(0);

我当时在想,我可以这样做:

    List<Long> idsProfile = profile.getFollowing();

    Query<Goal> query = ofy().load().type(Post.class)
                    .order("-createdDate") 
                    .filterKey("in", idsProfile) 
                    .limit(Constants.DEFAULT_LIST_LIMIT);

            if (cursor != null) {
                query = query.startAt(Cursor.fromWebSafeString(cursor));
            }

            QueryResultIterator<Goal> queryIterator = query.iterator();
            List<Post> postList = new ArrayList<Post>(Constants.DEFAULT_LIST_LIMIT);
            while (queryIterator.hasNext()) {
                postList.add(queryIterator.next());
            }

            return CollectionResponse.<Post>builder().setItems(postList).setNextPageToken(queryIterator.getCursor().toWebSafeString()).build();

我在这里做的是获得List idProfile个人正在关注并尝试查询和过滤ListPost上只能返回这些用户的{ "error": { "errors": [ { "domain": "global", "reason": "badRequest", "message": "java.lang.IllegalArgumentException: __key__ filter value must be a Key" } ], "code": 400, "message": "java.lang.IllegalArgumentException: __key__ filter value must be a Key" } }

但是我收到了这个错误:

.filterKey("in", idsProfile)

我一直在public interface IRepository<TEntity, in TKey> where TEntity : class { TEntity Get(TKey id); void Save(TEntity entity); void Delete(TEntity entity); } 位内尝试不同的事情,但似乎无法让它发挥作用。

有人可以帮助我完成这项工作吗?谢谢!

0 个答案:

没有答案