Google app engine Objectify-如何声明外键?
我正在与谷歌应用程序引擎和Objectify合作。我找不到如何在Objectify中声明外键 任何帮助都将不胜感激Google app engine Objectify-如何声明外键?,google-app-engine,foreign-keys,objectify,declare,Google App Engine,Foreign Keys,Objectify,Declare,我正在与谷歌应用程序引擎和Objectify合作。我找不到如何在Objectify中声明外键 任何帮助都将不胜感激 谢谢。Google App Engine数据存储不是RDBMS数据库,因此外键的概念并不特别存在。您可以通过在B中具有键属性来保存从实体A到实体B的引用。例如,考虑以下内容: @Entity public class A { @Id Long id; } @Entity public class B { @Id Long id; Key<A>
谢谢。Google App Engine数据存储不是RDBMS数据库,因此外键的概念并不特别存在。您可以通过在B中具有键属性来保存从实体A到实体B的引用。例如,考虑以下内容:
@Entity
public class A {
@Id Long id;
}
@Entity
public class B {
@Id Long id;
Key<A> referenceToA;
}
@实体
公共A类{
@Id长Id;
}
@实体
公共B级{
@Id长Id;
钥匙
希望这有帮助!除了thanos所说的,您可以通过只存储class a的@Id的字符串/Long来存储class B对class a的引用。这有节省空间的优点,但也有类型安全的缺点。如果您只使用Long,那么它可以是数据存储中任何实体类型的Id,并且您的cod必须e确保它使用正确,如果您存储了密钥,那么您存储的是ID和实体类型,因此代码中出现错误的可能性较小。您只需执行以下操作即可
@Entity
public class X {
@Id Long key;
}
@Entity
public class Y {
@Id Long key;
@Index X x;
}
或
@实体
公共Y类{
@Id长键;
@加载@Parent@Index Ref x;
公共用户getX(){返回this.x.get();}
public void setX(X值){this.X=Ref.Create(value);}
}
注意:永远不要忘记getter/setter(即使对于Id),因为它们决定了您从客户端进行的REST调用中的值。另外,请参阅
@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); }
}