【问题标题】:Objectify 5 - filter embedded entity field doesn't workObjectify 5 - 过滤嵌入实体字段不起作用
【发布时间】: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&lt;?&gt;,它本质上是一把钥匙。如果您将查询更改为 List&lt;Payment&gt; payments = ofy().load().type(Payment.class) .filter("parent = ", Ref.create(group)).list(); 会发生什么?
  • 哦,谢谢你解决了我的问题。我尝试了类似的东西,但没有奏效。 Tkans!
  • 很高兴听到。如果您想接受,我已添加我的评论作为答案。

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


【解决方案1】:

我认为您可能在这里混淆了术语,因为我没有看到 @Parent(实体组)或嵌入式实体。我确实看到了Ref&lt;?&gt;,它本质上是一把钥匙。

如果您将查询更改为

List&lt;Payment&gt; payments = ofy().load().type(Payment.class).filter("parent = ", Ref.create(group)).list();

它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2012-10-04
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2022-12-17
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多