看看下面的代码示例。
@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();
在构造函数中正确设置了列表,并且我有Serializable的默认空Ctor不会失败。
也许这是索引问题? datastore-indexes.xml看起来像这样
<datastore-index kind="B" ancestor="true" source="manual">
<property name="m_ListOfB_INTEGER_IDX" direction="asc"/>
</datastore-index>
不确定m_Children的索引应该如何,或者我是否需要添加它。
有什么想法吗? 感谢