Я использую Google App Engine и пытаюсь запрашивать/извлекать данные из хранилищ данных. Я без каких-либо успехов следил за почти 20 различными учебниками.
Вот изображение моего хранилища данных и соответствующих данных, которые я хранил там:
Вот некоторые из кода, который я должен извлечь данные:
//To obtain the keys
final DatastoreService dss=DatastoreServiceFactory.getDatastoreService();
final Query query=new Query("Coupon");
List<Key> keys = new ArrayList<Key>();
//Put the keys into a list for iteration
for (final Entity entity : dss.prepare(query).asIterable(FetchOptions.Builder.withLimit(100000))) {
keys.add(entity.getKey());
}
try {
for (int i = 0; i < keys.size(); i++){
Entity myEntity = new Entity("Coupon", keys.get(i));
System.out.println("Size of the Keys array = " + keys.size());
String description = (String) myEntity.getProperty("desc");
String endDate = (String) myEntity.getProperty("endDate");
System.out.println("Description = " + description);
System.out.println("End Date: " + endDate);
//Map here is empty...
Map<String, Object> test = myEntity.getProperties();
System.out.println("MAP SIZE = " + test.size());
}
} catch (Exception e){
e.printStackTrace();
}
**OUPUT:**
Size of the Keys array = 2
Description = null
End date = null
MAP SIZE = 0
Я не знаю, почему описание и конечная дата являются нулевыми. Это явно тянет в правый объект, так как размер показывает 2, что соответствует показанному изображению. Кроме того, когда я печатаю ключи, это также соответствует
(Что-то вроде этого: для keys.get(i).toString(); - Entity [! Global: Купон (123)/Купон (no-id-yet)]:. Или: Key String =! Global: Купон (5730827476402176)
Я следил за документацией (здесь) и некоторыми примерами (здесь) в меру своих возможностей, но я не могу понять это. У кого-нибудь есть какие-либо рекомендации или опыт в том, как получить свойства от Сущностей, если у вас есть они, без их возврата null?
Я прошел следующие вопросы Stackoverflow без каких-либо успехов, поэтому, пожалуйста, не закрывайте это с помощью простого дублирующего вопросительного маркера: 1) Как получить все дочерние объекты в Google App Engine (низкоуровневый API) 2) Хранение иерархических данных в хранилище данных Google App Engine? 3) Как вы используете свойства списка в хранилище данных Google App Engine в Java? 4) Массовые обновления в хранилище данных Google App Engine 5) Проверка наличия сущности в хранилище данных Google. ,
Эврика! Огромное спасибо всем, кто ответил. Патрис и пользователь2649908 особо спасибо, поскольку вы привели меня к ответу.
Итак, Патрис был совершенно прав в том, что я запрашивал ключи, создавал новый объект, а затем пытался разобрать вновь созданный (пустой) объект.
Решение заключалось в том, чтобы использовать PersistenceManager для анализа данных, а затем использовать методы getter/accessor для этого. Ссылка на менеджер сохранения (который я более или менее просто скопировал напрямую, поскольку он работал отлично) находится здесь: Как использовать менеджер сохранения JDO?
Как только я настроил диспетчер персистентности, я смог заставить его вытащить данные с помощью этого кода:
try {
for (int i = 0; i < keys.size(); i++){
//See the link for How to use JDO persistence manager on how to use this
PersistenceManager pm = MyPersistenceManagerClass.getPM();
//Need to cast it here because it returns an object
Coupon coupon = (Coupon) pm.getObjectById(Coupon.class, keys.get(i));
System.out.println("Created by = " + coupon.getCreatedBy());
System.out.println("Description = " + coupon.getDesc());
System.out.println("Modified by = " + coupon.getModifiedBy());
}
} catch (Exception e){
e.printStackTrace();
}
вы пробовали это?
//Put the keys into a list for iteration
for (final Entity entity : dss.prepare(query).asIterable (FetchOptions.Builder.withLimit(100000))) {
String description = (String) entity.getProperty("desc");
String endDate = (String) entity.getProperty("endDate");
System.out.println("Description = " + description);
System.out.println("End Date: " + endDate);
}
В вашем примере вы создаете сущность, и ожидается, что свойства будут пустыми