Google app engine 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>

我正在与谷歌应用程序引擎和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> 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); }
    }