我正在使用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。
我对这种行为感到很困惑。在执行此类查询时,识别符值不是用于区分实例吗?
谢谢大家:)