Google App Engine中的JDO和继承:如何使用“完整表”策略查询实体?

时间:2013-06-10 06:49:47

标签: google-app-engine inheritance google-cloud-datastore jdo

我正在使用Java Runtime和JDO / Datastore开发一个应用程序,以便在Google App Engine上实现持久性。我使用“完整表”策略创建了一个模型类层次结构,如下所示:

@PersistenceCapable
@Inheritance(customStrategy = "complete-table")
@Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME)
public abstract class A {
    ...
}

@PersistenceCapable
public class B extends A {
    ...
}

@PersistenceCapable
public class C extends A {
    ...
}

JDO使用鉴别器值将B类和C类实体正确地保存在单个表中。但是,如果我尝试这样做:

PersistenceManager pm = PMF.getPersistenceManager();
B result = pm.getObjectById(B.class, aKeyOfAnObjectOfClassC);

其中aKeyOfAnObjectOfClassC是一个引用C类对象的Key(他曾经想过),JDO返回一个B类对象而没有击打睫毛(即日志上没有任何奇怪的东西)。来自A的成员与null不同,而其他成员则为null。 我对这种行为感到很困惑。在执行此类查询时,识别符值不是用于区分实例吗?

谢谢大家:)

0 个答案:

没有答案