gpt4 book ai didi

java - Objectify:查询外键内容

转载 作者:行者123 更新时间:2023-12-01 10:05:55 24 4
gpt4 key购买 nike

我有三个实体:人类、狗、零食。 Treat 实体拥有 key Key<Dog> ,并且 Dog 实体拥有 key Key<Human> 。当我查询 Treat 时,我想要一个包含 Dog 的实际实体的响应,并且 Dog 的实体必须包含 Human 的实际实体:而不仅仅是键。我该怎么做?

更新

所以我希望能够执行以下两个查询

  • getAllTreats()应该返回所有零食的列表,通过每个零食我可以访问狗数据,然后通过所述狗数据找到人类数据。
  • 给定一个Treat ID,我想检索该Treat及其狗数据和所述狗的人类数据。

代码:(我给了pgiecek +1,因为他提到了@Parent符号。但问题仍然存在,至少对于单个Treat by treatId而言)

@Entity
public class Human {
@Id
private Long id;
private String name;
}

@Entity
public class Dog {
@Id
private Long id;
private String name;
@Load
@Parent
private Ref<Human> human;
}


@Entity
public class Treat {
@Id
private Long id;
private String name;
@Load
@Parent
private Ref<Dog> dog;
}

最佳答案

尝试使用Ref<?>以及@Load注释而不是 Key<?>Ref<?>工作原理就像 Key<?>但允许您直接访问实际的实体对象。此外,@Load注释使您能够更有效地加载关联的实体对象。

在这里您可以找到有关 Ref<?> 的更多详细信息以及 @Load .

更新

查询1

List<Treat> treats = ofy.load().type(Treat.class).list()

对于每个 Treat您必须访问的对象 Dog通过 Ref<?>.get() 手动引用并获取它方法。这同样适用于 Human 。但是,您可以使用 @Load父字段的注释。

查询2

如果您只有 Treat 的 ID ,无法加载实体,因为所有祖先路径实际上是实体的键。

The complete key identifying the entity consists of a sequence of kind-identifier pairs specifying its ancestor path and terminating with those of the entity itself.

在您的情况下,Treat 的 key 如下所示。

Key = [Human:ID, Dog:ID, Treat:ID]

为了检索具体的Treat例如,您需要知道其 ID 以及所有父项(在您的情况下为 DogHuman 实例/ID)或其 key 。看Key<?>.toWebSafeString()Key<?>.create(String) (或 Key<?>.valueOf(String) )方法可以帮助您将 key 序列化为 String并稍后恢复。

Treat treat = ... // create a new instance along with its parents

String webSafeKey = Key.create(treat).toWebSafeString();

// do whatever you need

Key<Treat> treatKey = Key.<Treat>create(webSafeKey);

Treat loaded = ofy.load().key(treatKey).now();

关于java - Objectify:查询外键内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com