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 <thebb...@gmail.com> 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 <lsor...@gmail.com> 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 google-appengine-java@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to