0

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

4

1 回答 1

0

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

于 2013-05-23T15:59:44.160 回答