我正在使用 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。我对这种行为感到很困惑。在执行这样的查询时,鉴别器值不是用于区分实例吗?
谢谢你们 :)