Java JDO不获取集合成员字段

Java JDO不获取集合成员字段,java,jdo,datanucleus,persistent,Java,Jdo,Datanucleus,Persistent,上课: 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, deta

上课:

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();
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();
}
PersistenceManager pm=PMF.getManager();
Query q=pm.newQuery(NodeBag.class);
尝试
{
列表管道=(列表)q.execute();
return nodeBags;//nodeBags[0]。节点始终为空
}
最后
{
q、 closeAll();
}
Nodebag.nodes始终为空

我错过什么了吗

提前谢谢

问候,,
保罗没能把它列入取回计划?根据DataNucleus文档和JDO规范,可能会在默认的获取组中进行标记,或者访问该字段,或者放入自定义的获取计划。

实际上,我还希望通过将答案转换为JSON来返回答案。 我已经设法加载了子对象。我使用的技巧是分离。通过分离,所有内容都将加载


谢谢。

在您返回对象的调用中,您可以使用FetchPlan指定要返回的FetchGroup。有关FetchGroup选项的更多信息,请参阅

通过在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();
}
PersistenceManager pm=PMF.getManager();
pm.getFetchPlan().setGroup(FetchGroup.ALL);
Query q=pm.newQuery(NodeBag.class);
试一试{
列表管道=(列表)q.execute();
return nodeBags;//nodeBags[0]。节点始终为空
}最后{
q、 closeAll();
}

我花了很长时间让fetch组工作。
Query
PersistenceManager
都有一个
getFetchPlan()
,但只有
PersistenceManager
上的那个似乎可以工作


另外,请确保您的对象是可分离的,并对结果使用
pm.detachCopyAll()

使用集合而不是列表,只要它在事务中,它就应该开始工作

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();
}