使用A的实例列表保持A类

时间:2011-04-04 13:57:51

标签: java google-app-engine jdo

看看下面的代码示例。

    @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true") 
    public class A implements Serializable
    {
        @PrimaryKey  
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
        @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")  
        private String key;
        @Persistent
        private String m_Name;
        @Persistent(mappedBy = "m_A")
        private List<B> m_ListOfB;
//...
    }



       @PersistenceCapable(identityType = IdentityType.APPLICATION,detachable="true") 
        public class B implements Serializable
        {
            @PrimaryKey
            @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
            @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
            private String key;
            @Persistent 
            private A m_A;
            @Persistent
        private List<B> m_Children;
//...
}

当我设置A的实例时,在m_ListOfB列表中有几个B(这些B-instanced也有几个孩子)并且坚持它,我只在我的数据存储区查看器中看到A. 如果我从B中删除m_Children,并尝试再次持久化A,我会看到A和m_ListOfB中的对象。

坚持这样

A a = new A("a");
B b = new B("b");
b.add_to_children(new B("child_of_b"));
a.add_to_list(b);

PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(a);
pm.close();

在构造函数中正确设置了列表,并且我有Seri​​alizable的默认空Ctor不会失败。

也许这是索引问题? datastore-indexes.xml看起来像这样

<datastore-index kind="B" ancestor="true" source="manual">
        <property name="m_ListOfB_INTEGER_IDX" direction="asc"/>
    </datastore-index>

不确定m_Children的索引应该如何,或者我是否需要添加它。

有什么想法吗? 感谢

0 个答案:

没有答案