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
-~----------~----~----~----~------~----~------~--~---

Reply via email to