I believe you are missing the @Embedded annotation on your list in the parent class. That said, I'm finding that adding the @Embedded annotation to the list will lead data nucleus to throw an exception. At this point I'm not sure how to have a list of embedded objects.
On Dec 27 2009, 4:16 pm, andreas_b <[email protected]> wrote: > Back to work after the holidays :-). > I changed the inner class to be a separate entity by itself, and then > it works perfectly fine. > It makes no sense to have that class "public" in my context, so I want > to have itembedded, > which leaves me with the same question..what am I doing wrong in > theembeddedcase? > > BR, Andreas > > On 23 Dec, 13:38, andreas_b <[email protected]> wrote: > > > Hi. > > > I'm using 1.3.0, but further investigations shows that this might not > > be related to lazy loading after all. > > I don't seem to be able to save/retrieve lists ofembeddedobjects at > > all... > > > I wrote some test examples to show my problem. I probably do something > > wrong here, but I really can't figure out what... > > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > > public class Test { > > > @PrimaryKey > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > @Extension(vendorName="datanucleus", key="gae.encoded-pk", > > value="true") > > private String iEncodedKey; > > > @Persistent(defaultFetchGroup = "true") > > private List<InnerTest> innerTests; > > > @PersistenceCapable > > @EmbeddedOnly > > public static class InnerTest{ > > > @Persistent > > private String whatever; > > > public InnerTest(){ > > whatever = "whatever"; > > } > > } > > > public Test(){ } > > > public void addSomeInnerTests(){ > > innerTests = new ArrayList<InnerTest>(); > > > for(int i = 0; i < 5; ++i) > > innerTests.add(new InnerTest()); > > } > > > public List<InnerTest> getInnerTests(){ > > return innerTests; > > } > > > } > > > and then I use the following testcode to save and retrieve the objects > > > // For saving > > Test test = new Test(); > > test.addSomeInnerTests(); > > > Test saved = pm.makePersistent(test); > > System.out.println("persisted Test innerTests size = " + > > saved.getInnerTests().size()); > > System.out.println("Saved Test key = " + saved.getKey()); > > > // For retrieving > > Query query = pm.newQuery(Test.class); > > List<Test> list = (List<Test>)query.execute(); > > System.out.println("Tests = " + list.size()); > > > for(Test test : list){ > > System.out.println("Retrieved Test key = " + test.getKey()); > > List<InnerTest> innerTests = test.getInnerTests(); > > System.out.println("innerTests size = " + innerTests.size()); > > > } > > > and this provides the following output > > > persisted Test innerTests size = 5 > > Saved Test key = agtib2xsdHJvbGxlbnIMCxIEVGVzdBjbsAEM > > Tests = 1 > > Retrieved Test key = agtib2xsdHJvbGxlbnIMCxIEVGVzdBjbsAEM > > innerTests size = 0 > > > So, why is the List in the retrieved Test empty? I have tried > > retrieving an object directly as well, but this naturally leads to an > > IndexOutOfBounds. > > In my real code, all the other variables are saved and retrieved > > properly. I have Lists of Strings and such as well, and they work just > > fine, so its definitely related to children/embeddedobjects. > > > Any help is appreciated. > > > Thanks / Andreas > > > On 23 Dec, 07:32, "Ikai L (Google)" <[email protected]> wrote: > > > >Embeddedobjects should be eager loaded with any SDK version 1.2.8+ and > > > above. Is this the version you are on? It's only child objects that are > > > not > > > eager loaded now. > > > > On Tue, Dec 22, 2009 at 3:15 PM, andreas_b > > > <[email protected]>wrote: > > > > > Hi all. > > > > > I'm struggling a bit with default fetch groups in one of my entities > > > > here.. > > > > > Basically I have something that looks like this > > > > > @PersistenceCapable(identityType = IdentityType.APPLICATION, > > > > detachable="true") > > > > public class A { > > > > > �...@persistent(defaultFetchGroup = "true") > > > > private List<B> embeddedObjects; > > > > > �...@persistencecapable(detachable="true") > > > > �...@embeddedonly > > > > public static class B { > > > > .... > > > > } > > > > } > > > > > I want the list of my B objects to be fetched automatically when I > > > > retrieve A from the datastore. This does not work however. It still > > > > seems to do lazy loading and I get the following warning: > > > > > 2009-dec-22 23:57:52 org.datanucleus.store.appengine.MetaDataValidator > > > > warn > > > > WARNING: Meta-data warning for A.embeddedObjects: The datastore does > > > > not support joins and therefore cannot honor requests to place child > > > > objects in the default fetch group. The field will be fetched lazily > > > > on first access..." > > > > > The above works fine if I change it to just: private B object, so the > > > > problem seems related to List or collections in general. I have been > > > > trying to find some explanation on this both in datanucleus docs and > > > > here, but have been unable to find it. > > > > > Oh, and I can't use the "touch" technique since I use generic object > > > > retrieval and that code has no knowledge of what the class contains, > > > > and I want to keep it that way. > > > > > Could someone explain how this works (or point me to someplace) and > > > > how I can solve it? > > > > > Thanks in advance. > > > > > BR, Andreas > > > > > -- > > > > > 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]<google-appengine-java%[email protected]> > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/google-appengine-java?hl=en. > > > > -- > > > Ikai Lan > > > Developer Programs Engineer, Google App Engine
-- 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.
