App Engine Datastore и низкоуровневый API
Я пытаюсь использовать хранилище данных App Engine (High Replication Datastore, HRD), и мне нужно использовать низкоуровневый API . Я никогда раньше не работал с базой данных сущностей, поэтому у меня возникли проблемы. Я пытался сохранить некоторые сообщения и комментарии, каждый пост может иметь больше комментариев
I tried this code for Post, but the problem is how to make ID auto-increment ?
Entity post = new Entity("post", ID);
post.setProperty("content", postContent);
post.setProperty("time", timeStamps);
И этот код для комментария, но я не понимаю, как использовать предка, чтобы установить связь между постом и комментарием. Должен ли я просто добавить свойство предка и присвоить ему значение идентификатора?
Entity comment = new Entity("comment", ID);
comment.setProperty("ancestor",postID);
comment.setProperty("content", commentContent);
comment.setProperty("time", timeStamps);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(comment);
1 ответ
Чтобы использовать функцию автоинкремента, вам нужно изменить конфигурацию вашего приложения, чтобы использовать устаревшую генерацию ключей:
<auto-id-policy>
legacy
</auto-id-policy>
тогда вы можете изменить свой код на следующее:
Entity post = new Entity("post");
post.setProperty("content", postContent);
post.setProperty("time", timeStamps);
если вы не передадите идентификатор, appengine сгенерирует его
чтобы использовать путь предка, вы можете изменить свой код следующим образом:
datastore.put(post);
Entity comment = new Entity("comment", post.getKey());
comment.setProperty("content", commentContent);
comment.setProperty("time", timeStamps);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(comment);
ключ предка будет помещен как конструктор arg.
вместо автоинкремента я бы порекомендовал вам использовать генерацию ключей по умолчанию, причем это не инкремент, но все же уникальный,
также должно быть быстрее, чем наследие