Предположим, моя модель хранилищу выглядит следующим образом:Когда вы храните идентификаторы и когда вы храните ключи в gae datastore?
@Entity
public class User {
@Id
private Long id;
@Index
private String email;
private Long dateOfBirth;
// More fields...
}
@Entity
public class Topic {
@Id
private Long id;
private String topicTitle;
private Long date;
}
@Entity
public class Comment {
@Id
private Long id;
@Parent
private Key<Topic> topicKey;
private Long commenterId;
private String text;
private Long date;
}
Если объект Комментарий имеет родительский объект Тема. Я знаю, что нужно хранить ключи при указании @Parent
, например, я сделал в объекте Comment, но должен также хранить ключ commenterId
? Или достаточно хранить идентификатор Long
этого Пользователя?
Просто интересно, что лучше всего подходит для хранения ссылок на другие объекты, если они не являются родителями - следует хранить идентификатор и генерировать ключ позже или просто хранить ключ для объекта. Есть ли веская причина, почему вы можете сделать это над другим?
EDIT: Поскольку я использую Cloud Endpoints, ответы, которые я получаю от моего проекта AppEngine, это JSON. Параметрированный тип ключа не разрешен в клиентских библиотеках. Так что для меня id
может работать, а также Key<?>
может работать. Сразу отметит, что вы должны вернуть версию websafe от вашего клиента с помощью:
myKey.getString();
Благодарим за отзыв! Я использую движок Google для работы с Google, и в моем примере выше показано, что GAE может делать только то, что вы сказали: извлекает родительский идентификатор из дочернего сущностного ключа, когда он хранит объекты. – Micro
Еще один вопрос на стороне примечания. Для ваших различных методов API вы предпочитаете использовать Entity в качестве параметра и получить его идентификатор внутри метода API или просто передать соответствующий идентификатор в качестве параметра? Например, вы бы сделали что-то вроде 'insertComment (User user, Comment comment)' или 'insertComment (@Named (" userId ") Long userId, комментарий к комментарию)'? – Micro
Это зависит :) Если мне нужна дополнительная информация от этого сущности, и у меня уже есть это, я передам его. Если у меня его еще нет, я передам идентификатор и верну его внутри метода. –