超类类型的ArrayList(ArrayList of super class type)

2019-10-30 16:53发布

我使用MongoDB的-DataNucleus将在我的项目。 配置我jdoconfig.xml如下:

    <persistence-manager-factory name="mongodb-factory">
    <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory" />
    <property name="javax.jdo.option.ConnectionURL" value="mongodb:localhost/test" />
    <property name="javax.jdo.option.Mapping" value="mongodb" />
    <property name="javax.jdo.option.ConnectionUserName" value="username" />
    <property name="javax.jdo.option.ConnectionPassword" value="psw" />
    <property name="javax.jdo.option.Optimistic" value="false" />
    <property name="datanucleus.autoCreateSchema" value="true" /> 
    <property name="datanucleus.DetachAllOnCommit" value="true" />
    <property name="datanucleus.DetachOnClose" value="true" />
    </persistence-manager-factory> 

我创建超类:

    @PersistenceCapable(detachable="true")
    public class Definition implements Serializable {
        private String label;
    }

我创建了一个子类:

    @PersistenceCapable(detachable="true")
    public class SubDefinition extends Definition implements Serializable {
        private String label;
    }

然后,我创建存储定义的数组列表类:

    @PersistenceCapable(detachable="true")
    public class Master implements Serializable {
        @Persistent(defaultFetchGroup="true")
        @Element(dependent = "true")
        private List<Definition> subDef;
    }

我的定义的列表可以包含类型定义或SubDefinition的对象。 我创建了一个主对象,并坚持它。

当我找回我的对象​​形成数据库中的问题发生:

    Transaction tx = pm.currentTransaction();
    tx.begin();
    Query query = pm.newQuery();
    query.setClass(Master.class);
    Collection<Master> masterList = (Collection<Master>)query.execute();
    tx.commit();

如果我没有重新启动我的服务器,该代码获取正确的对象,我的“subDef”列表加载正确。 但是,我重新启动我的服务器的数据库后,该对象不正确。 变量“subDef”包含一个空数组。 它应该包含两个子元素。

每个我重新启动我的服务器时间后发生此问题。 之后,我重新启动一些代码,使数组空。 这不是我的代码之一。

如果我检查到数据库中,两个子元素都存在,但没有任何联系起来更与他们的父母。 直接后,我坚持的对象,关系是正确的存在到数据库。

所存储的对象的图形表示:

    Master
      ->subDef
        ->Definition (children 1)
        ->Definition (children 2)

为什么我有这个问题? 也许创建超类的列表是不容?

非常感谢,

Answer 1:

所有的文档,按http://www.datanucleus.org/products/accessplatform_3_1/jdo/fetchgroup.html#static节上的“获取深度”。



文章来源: ArrayList of super class type