无法使用DataNucles JDO读取继承的类实例

时间:2013-05-23 06:50:06

标签: java jdo datanucleus

我无法读取完整的继承类实例,如以下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?

查询子类属性

1 个答案:

答案 0 :(得分:0)

所以你没有让持久性机制知道子类(无论是使用自动启动机制,persistence.xml,在子类上调用pm.getExtent,还是简单地实例化subclass.class)。它只能查询它“知道”的类