我正在使用 Google 应用引擎和 Objectify。我找不到如何在 Objectify 中声明外键。
任何帮助将非常感激。
谢谢。
我正在使用 Google 应用引擎和 Objectify。我找不到如何在 Objectify 中声明外键。
任何帮助将非常感激。
谢谢。
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 中数据建模的更多信息,请查看:
希望这可以帮助!
除了thanos所说的之外,您可以通过存储类A的@Id的String/Long来存储类B对类A的引用。这样的优点是节省空间,但缺点是类型安全。如果您只使用 Long 那么它可以是数据存储中任何实体类型的 ID,并且您的 cod 必须确保正确使用它,如果您存储存储 ID 和实体类型的密钥,那么您就更少了您的代码中可能有错误。
你可以简单地做
@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 调用中的值。