【发布时间】:2014-09-10 11:22:47
【问题描述】:
我尝试从我自己的名为“付款”的类中加载对象列表。现在我不想加载所有付款,而只想加载具有特定“组”作为父级的付款(组也是一个自己的类)。
这是支付类:
@Entity
public class Payment {
@Id private Long id;
@Index @Load private Ref<Group> parent;
// other fields, constructors, getters and setters
}
这是我的 Group 课程:
@Entity
public class Group {
@Index @Id private Long id;
// other fields, constructors, getters and setters
}
以下是我尝试加载此付款列表的方法:
public static List<Payment> getPaymentsByGroup(Group group) {
List<Payment> payments = ofy().load().type(Payment.class)
.filter("parent.id", group.getId()).list();
return payments;
}
但结果总是一个空列表。但如果我尝试做这样的事情:
public static List<Payment> getPaymentsByGroup(Group group) {
List<Payment> temp = new ArrayList<>();
List<Payment> payments = ofy().load().type(Payment.class).list();
for (Payment payment : payments) {
if(payment.getParent().getId().equals(group.getId())){
temp.add(payment);
}
}
return temp;
}
我会收到我的付款。我使用 Objectify 5。由于性能原因,Payment 类应该是一个自己的实体,而不是作为普通的嵌入对象存储在 Group 类中。否则,整个组对象必须通过添加一笔付款与所有付款一起存储。
我做错了什么?如何过滤嵌入实体中的字段?
【问题讨论】:
-
我认为您可能在这里混淆了术语,因为我没有看到
@Parent(实体组)或嵌入式实体。我确实看到了Ref<?>,它本质上是一把钥匙。如果您将查询更改为List<Payment> payments = ofy().load().type(Payment.class) .filter("parent = ", Ref.create(group)).list();会发生什么? -
哦,谢谢你解决了我的问题。我尝试了类似的东西,但没有奏效。 Tkans!
-
很高兴听到。如果您想接受,我已添加我的评论作为答案。
标签: java google-app-engine objectify google-cloud-datastore