2

上课:

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 总是空的!

我错过了什么?

提前致谢。

问候,保罗

4

5 回答 5

1

我花了很长时间让 fetch 小组开始工作。Both Queryand PersistenceManagerhave a getFetchPlan(),但只有 onPersistenceManager似乎有效。

此外,请确保您使您的对象可拆卸并用于pm.detachCopyAll()结果。

于 2010-09-21T14:42:50.743 回答
1

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

您可以通过在 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();
}
于 2010-06-29T12:05:23.427 回答
0

错过了将其放入获取计划中?根据 DataNucleus 文档和 JDO 规范,可能在默认提取组中标记,或访问该字段,或放入自定义提取计划。

于 2009-12-24T08:26:19.947 回答
0

使用 Collection insted of List ,只要它在事务中,它就应该开始工作

于 2014-04-25T20:33:52.227 回答
0

实际上,我还希望通过将其转换为 JSON 来通过网络返回答案。而且我已经设法加载子对象。我使用的技巧是分离。通过分离,一切都将被加载。

谢谢。

于 2010-01-01T10:01:00.637 回答