2012-04-08 2 views
0

Я пытаюсь перевести этот код Python на Java из презентации Building Scalable, Complex Apps on App Engine,Google App Engine DataStore - Как эффективно выбрать родительские объекты из ключей дочерней таблицы в Java?

Есть ли поддержка на GAEJ, чтобы сделать это?

indexes = db.GqlQuery("SELECT __key__ FROM MessageIndex " "WHERE receivers = :1", me) 
keys = [k.parent() for k in indexes] 
messages = db.get(keys) 

Ниже моей реализации на Java. Являются ли эти функциональные и эффективные эквивалентные? Что произойдет, если у меня будет большое количество ключей?

Query query1 = new Query("MessageIndex"); 
query1.setKeysOnly(); 
query1.addFilter("receivers", FilterOperator.EQUAL, me); 

PreparedQuery pq2 = datastore.prepare(query1); 

Iterable<Entity> entities = pq2.asIterable(); 
HashSet<Key> keys = new HashSet<Key>(); 
    for (Entity en : entities) 
     keys.add(en.getParent()); 

Query query2 = new Query("Messages"); 
query2.addFilter("__key__", FilterOperator.IN, keys); 
+0

Рассматривали ли вы с помощью объективизации? Это намного менее болезненно, чем JDO или JPA. –

+0

Что было бы эквивалентом фрагмента выше с объективизацией? –

+0

Я сам не использую Java, поэтому я не мог сказать, но в документах Objectify есть много примеров. –

ответ

1

Как уже отмечалось, @Rick получает намного быстрее и дешевле, чем запросы. Вам просто нужно изменить последнюю часть вашего кода. Вместо того, чтобы:

Query query2 = new Query("Messages"); 
query2.addFilter("__key__", FilterOperator.IN, keys); 

просто сделать:

Map<Key,Entity> messages = datastore.get(keys); 
Смежные вопросы