我无法读取完整的继承类实例,如以下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 items = getPersistenceManager().getExtent(IdeaItem.class,true);
javax.jdo.Query q = getPersistenceManager().newQuery(items);
List data = (List)q.execute();
与JDO文档一样,这应该返回整个对象图。但这并没有记录任何记录。当我检查日志时,我发现它正在搜索一个替代,其中Discriminator Value等于“com.mydomain.IdeaItem”,它不存在。当我删除Discriminator注释时,我得到了表中的所有记录。即使我如何访问子类属性?此外,我如何使用基类Extent?
查询子类属性答案 0 :(得分:0)
所以你没有让持久性机制知道子类(无论是使用自动启动机制,persistence.xml,在子类上调用pm.getExtent,还是简单地实例化subclass.class)。它只能查询它“知道”的类