【发布时间】:2012-10-11 03:17:09
【问题描述】:
我正在使用 Google 应用引擎和 Objectify。我找不到如何在 Objectify 中声明外键。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: google-app-engine foreign-keys objectify declare
我正在使用 Google 应用引擎和 Objectify。我找不到如何在 Objectify 中声明外键。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: google-app-engine foreign-keys objectify declare
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 调用中的值。
【讨论】: