[英]Objectify sequence query
I try to have such code: 我尝试有这样的代码:
Query<Card> query = ofy().load().type(Card.class);
UserData creator = ofy().load().type(UserData.class).id(creatorId).now();
if (creator != null && UserType.USER.equals(creator.getUserType())) {
query.filter("creator", creator);
}
if (orderColumnName != null) {
query.order((ascending ? "" : "-") + orderColumnName);
}
query.offset(startRow).limit(limit);
return query.list();
But it doesn't filter. 但是它不会过滤。 Also this filter:
还有这个过滤器:
UserData creator = ofy().load().type(UserData.class).id(creatorId).now();
Query<Card> query = ofy().load().type(Card.class).filter("creator", creator);
Any idea why? 知道为什么吗?
EDITED 已编辑
My class Card.java 我的班级Card.java
@Entity
public class Card implements PersistableObject {
@Id
Long id;
@Index
Date createDate;
...
@Index
Ref<UserData> creator;
...
public UserData getCreator() {
if (creator != null) {
return creator.get();
}
return null;
}
public void setCreator(UserData creator) {
this.creator = Ref.create(creator);
}
}
My class UserData.java 我的类UserData.java
@Entity
public class UserData implements PersistableObject {
@Id
Long id;
Ref<EaistoAccount> eaistoAccount;
UserType userType;
public EaistoAccount getEaistoAccount() {
if (eaistoAccount == null) {
return null;
}
return eaistoAccount.get();
}
public void setEaistoAccount(EaistoAccount aistoAccount) {
this.eaistoAccount = Ref.create(aistoAccount);
}
}
It doesn't work means that I expect to get filtered entities to corresponding UserData but it doesn't filter when I split query in a few parts also it filters when I use query in one line. 它不起作用意味着我希望将过滤后的实体获取到相应的UserData,但是当我将查询分为几部分时它不会过滤,当我在一行中使用查询时它也会过滤。
I have found a solution: 我找到了解决方案:
Why aren't my queries working properly?
为什么我的查询不能正常工作? All of Objectify's intermediate command objects are immutable.
Objectify的所有中间命令对象都是不可变的。 This will not work:
这将不起作用:
Query q = ofy().load().type(Foo.class);
查询q = ofy()。load()。type(Foo.class); q.filter("bar", bar);
q.filter(“ bar”,bar); List foos = q.list();
列出foos = q.list(); The filter command did nothing because you did not reassign q.
filter命令没有执行任何操作,因为您没有重新分配q。 You need this:
你需要这个:
q = q.filter("bar", bar);
q = q.filter(“ bar”,bar); Alternatively, chain the whole sequence in a single statement.
或者,将整个序列链接在一个语句中。 Read more here.
在这里阅读更多。
https://code.google.com/p/objectify-appengine/wiki/FrequentlyAskedQuestions https://code.google.com/p/objectify-appengine/wiki/FrequentlyAskedQuestions
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.