我是JDO的新手,但是我愿意用它来使我的代码可移植(目前我正在使用AppEngine,这就是为什么)。在下面的Google Talk:http://dl.google.com/io/2009/pres/W_0415_Building_Scalable_Complex_App_Engines.pdf中,Brett Slatkin展示了一种新的高效模式,可以使用子键[幻灯片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代码?
非常欢迎任何意见/建议!
P.S。该视频的链接位于:http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html - &gt;非常有趣!
感谢。
答案 0 :(得分:0)
没关系。我找到了另一种方法。每当我创建一个Message时,我都会使用相同的密钥创建MessageIndex。这样,MessageIndex始终与Message关联,因为它们共享相同的密钥。现在,我可以简单地从MessageIndex获取getKey()并在Message实体中使用getObjectById()来获取相应的消息。如果有人有比这更好的解决方案我会很感激,但是现在我会采用这种方法。不管怎样,谢谢。