Как я могу сопоставить отношения родитель-ребенок в JDO, где у каждого родителя есть список детей? - PullRequest
0 голосов
/ 05 февраля 2011

Я новичок в JDO, но я хочу использовать его, чтобы сделать мой код переносимым (сейчас я использую AppEngine, вот почему).В следующем Google Talk: http://dl.google.com/io/2009/pres/W_0415_Building_Scalable_Complex_App_Engines.pdf, Бретт Слаткин продемонстрировал новый эффективный шаблон для извлечения родительских объектов с использованием дочерних ключей [слайды 23–25].В его примере у него не было сопоставления родительских и дочерних отношений для классов в Python.Я не знаю, как работает Python, но я предполагаю, что в JDO вам нужно где-то указать родителя.Итак, для следующего кода, как я могу сопоставить MessageIndex как дочерний элемент с Message:

// Message.java
@PersistenceCapable
public class Message {
    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
    Long id;

    @Persistent String sender;
    @Persistent Text body;
}

// MessageIndex.java
public class MessageIndex {
    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
    Long id;

    @Persistent List<String> receivers;
}

// Query.java - Query Example
Query query = pm.newQuery("select id from MessageIndex" +
                          "where receivers == NameParam " +
                          "parameters String NameParam");
List<Key> indexes = (List<Key>) query.execute("Smith"); // List the child keys here
List<Key> keys = new List<Key>; // A place to store parent keys
for (Key k : indexes)
{
    keys.add(k.getParent()); // Here, how would getParent() know who it's parent is?
}

List <Message> messages = new List <Message>
for (Key k : keys)
{
    messages.add(pm.getObjectById(Message.class, k));
}

Итак, как я могу сопоставить родительско-дочерние отношения между Message и MessageIndex в этом примере?Правильно ли я преобразовал код Python?

Любые комментарии / предложения приветствуются!

PS Ссылка на видео находится здесь: http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html -> очень интересно!

Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2011

Неважно.Я нашел другой способ сделать это.Всякий раз, когда я создаю Сообщение, я создаю MessageIndex с тем же ключом.Таким образом, MessageIndex всегда ассоциируется с сообщением, потому что они используют один и тот же ключ.Теперь я могу просто получить getKey () из MessageIndex и использовать getObjectById () в сущности Message, чтобы получить соответствующее сообщение.Я был бы признателен, если бы у кого-нибудь были лучшие решения, чем эта, но сейчас я пойду с этим методом.В любом случае, спасибо.

...