Я работаю с движком приложений Google и Objectify. Я не могу найти, как объявить внешний ключ в Objectify.
Любая помощь могла бы быть полезна.
Спасибо.
Я работаю с движком приложений Google и Objectify. Я не могу найти, как объявить внешний ключ в Objectify.
Любая помощь могла бы быть полезна.
Спасибо.
Хранилище данных 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 см.:
Надеюсь это поможет!
В дополнение к тому, что сказал Танос, вы можете сохранить ссылку на класс A из класса B, просто сохранив String/Long @Id класса A. Это имеет преимущество в экономии места, но недостаток безопасности типов. Если вы просто используете Long, то это может быть идентификатор для любого типа объекта в хранилище данных, и ваш код должен убедиться, что он используется правильно, если вы сохраняете ключ, вы сохраняете идентификатор и тип объекта, поэтому вы меньше в вашем коде могут быть ошибки.
Вы можете просто сделать
@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, который вы делаете от клиента.