无法读取带有DataNucles JDO的继承类实例



我无法读取如下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"one_answers"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查询子类属性?

所以您没有让持久化机制知道子类(无论是使用自动启动机制、persistence.xml还是调用pm。或者简单地实例化子类。class)。它只能查询它"知道"的类

最新更新