Max is right, although there's a small issue with the syntax: @Persistent(mappedBy="parent", defaultFetchGroup = "true") public List<Child> childs;
- Jason On Mon, Oct 19, 2009 at 10:26 PM, Max Zhu <[email protected]> wrote: > Hi Lars, > > Try to annotate your relationship as follows: > > @Persistent(mappedBy="parent", default-fetch-group="true") > public List<Child> childs; > > > On Tue, Oct 20, 2009 at 12:19 AM, Lars <[email protected]> wrote: > >> >> Hi, >> I am failing to retrieve child-objects in a one-to-many JDO relation >> in the datastore. The case is as follows; >> >> I have two classes (Parent & Child, code-snippet below) with a defined >> one-to-many relation. >> It is no problem storing the structure with the 'store'-operation >> defined below. This is easily verified by web-browsing the datastore. >> >> However, when retrievning the parent-object from the datastore >> ('fetchParents'), the ''childs' attribute is always null. What must be >> done to (auto-)populate this attribute from the datastore? >> Also, the 'parent'-attribute of the Child-objects will also be null if >> they are fetched in a similar way. >> >> All clues appreciated... >> >> Lars >> >> - - - - - - - Code samples below - - - - - - >> >> @PersistenceCapable(identityType = IdentityType.APPLICATION) >> public class ParentDTO { >> @PrimaryKey >> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) >> @Extension(vendorName="datanucleus", key="gae.encoded-pk", >> value="true") >> private String encodedKey; >> >> @Persistent >> public String name; >> >> @Persistent(mappedBy="parent") >> public List<Child> childs; >> >> public ParentDTO() >> { >> >> } >> >> public void add(Child c) >> { >> if (childs == null) >> childs = new ArrayList<Child>(); >> kids.add(c); >> } >> } >> >> - - - - >> >> @PersistenceCapable(identityType = IdentityType.APPLICATION) >> public class Child { >> @PrimaryKey >> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) >> @Extension(vendorName="datanucleus", key="gae.encoded-pk", >> value="true") >> public String encodedKey; >> @Persistent >> public String name; >> >> @Persistent >> public Parent parent; >> >> public Child() >> { >> } >> >> public String getEncodedKey() { >> return encodedKey; >> } >> } >> >> - - - - - >> >> Storing to datastore (works perfectly) >> >> public void store() >> { >> Parent p = new Parent(); >> p.navn = "nils"; >> >> Child c = new Child(); >> c.name = "jim"; >> p.add(c); >> >> c = new ChildDTO(); >> c.name = "anne"; >> p.add(c); >> >> PersistenceManager pm = >> PMF.get().getPersistenceManager(); >> try { >> pm.makePersistent(p); >> } catch (Exception ee) { >> res = ee.getMessage(); >> } finally { >> pm.close(); >> } >> } >> >> - - - - - - Fetching data (not working) >> >> public String fetchParents() >> { >> String res = ""; >> PersistenceManager pm = >> PMF.get().getPersistenceManager(); >> >> javax.jdo.Query query = pm.newQuery(Parent.class); >> List<Parent> parents = (List<Parent>) query.execute(); >> Iterator<Parent> iterF = parents.iterator(); >> while (iterF.hasNext()) { >> Parent f = iterF.next(); >> res = res + ":" + f.name; >> if (f.childs != null) { // this is the >> problem - 'this.childs' is >> always null >> Iterator<Child> iterI = >> f.childs.iterator(); >> while (iterI.hasNext()) { >> Child idto = iterI.next(); >> res = res + ">" + >> idto.name; >> } >> } >> } >> pm.close(); >> } >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
