我无法读取完整的继承类实例,如以下 URL 中所述
http://www.datanucleus.org/products/datanucleus/jdo/orm/inheritance.html
下面描述类的映射。
@PersistenceCapable(detachable = "true")
@Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME)
@Inheritance(strategy=InheritanceStrategy.NEW_TABLE)
public class IdeaItem {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Column(jdbcType = "INTEGER", length = 11)
private long id;
@Column(name="IDEAID")
private Idea idea;
@Column(jdbcType = "INTEGER", length = 11)
private long showOrder;
}
@PersistenceCapable(detachable = "true")
@Inheritance(strategy=InheritanceStrategy.NEW_TABLE)
public class IdeaItemText extends IdeaItem {
@Column(jdbcType = "VARCHAR", length = 500)
private String text;
}
数据保存部分工作正常。我插入了“IdeaItemText”对象,并且“IdeaItem”和“IdeaItemText”表都成功更新了。
现在我需要通过将“IdeaItem”作为 Extent 来阅读子类。我执行了以下代码。
Extent items = getPersistenceManager().getExtent(IdeaItem.class,true);
javax.jdo.Query q = getPersistenceManager().newQuery(items);
List data = (List)q.execute();
正如在 JDO 文档中一样,这应该返回整个对象图。但这并没有返回任何记录。当我检查日志时,我发现它正在搜索一个不存在的鉴别器值等于“com.mydomain.IdeaItem”的记录。当我删除鉴别器注释时,我得到了表中的所有记录。即使我如何访问子类属性?此外,我如何使用基类 Extent 查询子类属性?