上课:
class Node implements Serializable
{
private String name;
public String getName { return name; }
public void setName(String val){ name = val; }
public Node(){}
}
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
class NodeBag implements Serializable
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Long id;
@Persistent(serialized="true")
private ArrayList<Node> nodes = new ArrayList<Node>();
public String getNodes { return nodes; }
public void setNodes(ArrayList<Node> val){ nodes = val; }
public NodeBag(){}
}
我可以使用此
将其保存到数据库中PersistenceManager pm = PMF.getManager();
try
{
pm.makePersistent(newBag);
}
finally
{
pm.close();
}
但是当我加载它时
PersistenceManager pm = PMF.getManager();
Query q = pm.newQuery(NodeBag.class);
try
{
List<NodeBag> pipelines = (List<NodeBag>)q.execute();
return nodeBags; // nodeBags[0].nodes is always empty
}
finally
{
q.closeAll();
}
Nodebag.nodes总是空的!
我错过了什么吗?
提前致谢。
此致 保罗
答案 0 :(得分:1)
在您返回对象的调用中,您可以使用FetchPlan指定要返回的FetchGroup。有关FetchGroup选项的更多信息,请参阅JDO docs。
通过在PersistenceManager中指定要使用的FetchGroup,可以确保获取所有实体。修改后的代码如下所示:
PersistenceManager pm = PMF.getManager();
pm.getFetchPlan().setGroup(FetchGroup.ALL);
Query q = pm.newQuery(NodeBag.class);
try {
List<NodeBag> pipelines = (List<NodeBag>)q.execute();
return nodeBags; // nodeBags[0].nodes is always empty
} finally {
q.closeAll();
}
答案 1 :(得分:1)
我有一段时间让获取组工作。 Query
和PersistenceManager
都有一个getFetchPlan()
,但只有PersistenceManager
上的那个似乎有效。
此外,请确保您的对象可以拆卸,并在结果上使用pm.detachCopyAll()
。
答案 2 :(得分:0)
错过了将其放入获取计划中?根据DataNucleus docs和JDO规范,在默认提取组中标记,或者访问该字段,或者放入自定义提取计划。
答案 3 :(得分:0)
实际上,我还希望通过将其转换为JSON来回复整个网络。 我已经设法加载子对象。我使用的技巧是分离。通过分离,一切都将被加载。
感谢。
答案 4 :(得分:0)
使用Collection而不是List,只要它在事务中就应该开始工作