2

我正在使用 Google 应用引擎和 Objectify。我找不到如何在 Objectify 中声明外键。

任何帮助将非常感激。

谢谢。

4

3 回答 3

2

Google App Engine 数据存储不是 RDBMS 数据库,因此外键的概念并不特别存在。您可以通过在 B 的 A 中具有 Key 属性来保存从实体 A 到实体 B 的引用。例如,考虑以下内容:

@Entity
public class A {
    @Id Long id;
}

@Entity
public class B {
    @Id Long id;
    Key<A> referenceToA;
}

有关 GAE 中数据建模的更多信息,请查看:

希望这可以帮助!

于 2012-10-11T06:19:54.790 回答
0

除了thanos所说的之外,您可以通过存储类A的@Id的String/Long来存储类B对类A的引用。这样的优点是节省空间,但缺点是类型安全。如果您只使用 Long 那么它可以是数据存储中任何实体类型的 ID,并且您的 cod 必须确保正确使用它,如果您存储存储 ID 和实体类型的密钥,那么您就更少了您的代码中可能有错误。

于 2012-10-11T21:00:35.343 回答
0

你可以简单地做

@Entity
public class X {
    @Id Long key;
}

@Entity
public class Y {
    @Id Long key;
    @Index X x;
}

或者

@Entity
public class Y {
    @Id Long key;
    @Load @Parent @Index Ref<X> x;
    public User getX() { return this.x.get(); }
    public void setX(X value) { this.x= Ref.Create(value); }
}

注意:永远不要忘记 getter/setter(即使是 Id),因为它们决定了您从客户端进行的 REST 调用中的值。

于 2015-10-24T19:10:46.423 回答