Objectify - Как объявить внешний ключ?

Я работаю с движком приложений Google и Objectify. Я не могу найти, как объявить внешний ключ в Objectify.

Любая помощь могла бы быть полезна.

Спасибо.


person Varundroid    schedule 11.10.2012    source источник


Ответы (3)


Хранилище данных Google App Engine не является базой данных СУБД, поэтому понятие внешнего ключа специально не существует. Вы можете сохранить ссылку из сущности A в сущность B, имея свойство Key в A из B. Например, рассмотрим следующее:

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

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

Для получения дополнительной информации о моделировании данных в GAE см.:

Надеюсь это поможет!

person Thanos Makris    schedule 11.10.2012
comment
Также см. code.google.com/p/objectify-appengine/wiki. / - person stickfigure; 11.10.2012

В дополнение к тому, что сказал Танос, вы можете сохранить ссылку на класс A из класса B, просто сохранив String/Long @Id класса A. Это имеет преимущество в экономии места, но недостаток безопасности типов. Если вы просто используете Long, то это может быть идентификатор для любого типа объекта в хранилище данных, и ваш код должен убедиться, что он используется правильно, если вы сохраняете ключ, вы сохраняете идентификатор и тип объекта, поэтому вы меньше в вашем коде могут быть ошибки.

person Michael    schedule 11.10.2012

Вы можете просто сделать

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

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

OR

@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); }
}

Примечание. Никогда не забывайте о геттерах и сеттерах (даже для идентификатора), поскольку они определяют, какие значения поступают в вызове REST, который вы делаете от клиента.

person Aniket Thakur    schedule 24.10.2015