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

フェッチグループを機能させるのにかなりの時間を費やしました。と の両方QueryPersistenceManagerがありますが、getFetchPlan()on の 1 つだけが機能してPersistenceManagerいるようです。

また、オブジェクトを取り外し可能に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

実は、JSON に変換してネットワーク経由で回答を返すことも望んでいました。そして、子オブジェクトをロードすることができました。私が使用するトリックはデタッチです。デタッチすることで、すべてがロードされます。

ありがとう。

于 2010-01-01T10:01:00.637 に答える