Свойства как проиндексированная карта в gae-datastore - PullRequest
0 голосов
/ 17 октября 2011

У меня есть небольшое, но важное сомнение относительно хранилища данных низкого уровня от Google App Engine.Мне нужна структура документа, подобная этой:

{infNfe id="1234"
    det={nItem="1",prod="prodname"},
    det={nItem="2",prod="prodname"},
    det={nItem="3",prod="prodname"}
}

Обратите внимание, что элемент det также является Map, но, к сожалению, хранилище данных не принимает Map как indexed свойство.

Заблокировав какой-то пример, я нашел что-то вроде этого:

Entity i = new Entity("infNfe","key");
i.setProperty("id",1234);
Entity det1 = new Entity("det",i.getKey());
det1.setProperty("nItem",1);
det1.setProperty("prod","prodname");
..Others dests..

Но, когда я запрашиваю некоторую дочернюю сущность, я получаю неполные ссылки.

Query dq= new Query("det");
dq.setAncestor(i.getKey());
..Printing result..
{nItem="1",prod="prodname"}

При таком подходеЯ могу получить только одну дет сущность за раз.Как я могу получить родителей и детей сразу?

Спасибо .....

1 Ответ

0 голосов
/ 20 октября 2011

Проблема с дочерним методом заключается в том, что вы получаете много объектов, что означает большую стоимость, потому что вы платите за результат get / put / query (по крайней мере, по новой цене).

Objectify является отличной основой для выполнения этих запросов. Чтобы создать карту с помощью Objectify, вы создаете второй класс с двумя типами, которые вы хотите отобразить:

class Det
{
    long nItem;
    String prod;
}

class InfNfe
{
    @Id Long id;
    @Embedded List<Det> dets;
}

Затем будут храниться данные, подобные следующим

id = 1
dets.nItem = [1, 2, 3, 4]
dets.prod = ["A", "B", "C", "D"]

с помощью Objectify вы можете затем указать, какие элементы индексируются, и вы можете делать запросы на основе некоторых из этих данных (хотя я не знаю, как это происходит, когда ему удается запрашивать данные в середине массива).

...