Okay, I see. In my case it is a List not a Set ... but I think that
really makes no difference.
What I think is strange is that you initialize the fields:
@Persistent(defaultFetchGroup = "true", mappedBy = "_Parent")
@Element(dependent = "true")
private Set<Card> _Cards = new HashSet<Card>();
maybe that causes the _Cards to be reinitialized when the Entity is
deserialized. Can you try to remove that?
Cheers,
Toby
On Mar 7, 2:19 pm, tempy <[email protected]> wrote:
> Thanks for the suggestion...
>
> I did try that exact code and sad to say it didn't help, just returned
> a 0-size collection. I'm still trying to figure this out...
>
> On Mar 7, 10:58 am, Toby <[email protected]> wrote:
>
> > Hello Mike,
>
> > have you tried touching them before you close the query?
> > I had similar problem and only solved it by calling the getter for the
> > owned collection before detaching the results.
>
> > if (results.iterator().hasNext()) {
> > for (Product fp : results) {
> > //this is to force the collections to be detached
> > fp.getItems();
> > }
> > return pm.detachCopyAll(results);
> > ...
>
> > I found no better way to do that. I actually started managing
> > relationships by hand now because you have more control and more
> > performance especially if you do not always need the child
> > collections.
>
> > But maybe there is also a way to trigger that through an annotation.
>
> > Cheers,
> > Toby
>
> > On Mar 7, 1:46 am, tempy <[email protected]> wrote:
>
> > > I have the following 3-part owned relationship...
>
> > > Users, the root entity, have a collection of Decks, as such (I am not
> > > including the specific subclass of User as it doesn't seem to be
> > > relevant):
>
> > > @PersistenceCapable(identityType = IdentityType.APPLICATION)
> > > @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
> > > public abstract class User {
> > > @PrimaryKey
> > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > > protected Key _ID;
>
> > > @Persistent
> > > protected String _UniqueIdentifier;
>
> > > @Persistent(defaultFetchGroup = "true", mappedBy = "_Owner")
> > > @Element(dependent = "true")
> > > protected Set<Deck> _Decks;
>
> > > protected KleioUser()
> > > {
> > > }
>
> > > }
>
> > > Each Deck has a collection of Cards, as such:
> > > @PersistenceCapable
> > > public class Deck {
> > > @PrimaryKey
> > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > > private Key _ID;
>
> > > @Persistent
> > > String _Name;
>
> > > @Persistent(defaultFetchGroup = "true", mappedBy = "_Parent")
> > > @Element(dependent = "true")
> > > private Set<Card> _Cards = new HashSet<Card>();
>
> > > @Persistent
> > > private Set<String> _Tags = new HashSet<String>();
>
> > > @Persistent
> > > private KleioUser _Owner;
>
> > > }
>
> > > And finally, each card:
>
> > > @PersistenceCapable
> > > public class Card {
> > > @PrimaryKey
> > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > > private Key _ID;
>
> > > �...@persistent
> > > private Text _Question;
> > > @Persistent
> > > private Text _Answer;
> > > @Persistent
> > > private Deck _Parent;
>
> > > }
>
> > > I've only run this on the dev server. When I create a new user and
> > > populate the corresponding decks and corresponding cards and then call
> > > pm.makepersistent(user), everything looks fine and I can see all the
> > > user, deck, and card entities in the development datastore. However,
> > > when I try to retrieve a user with the following query:
>
> > > Query query = _pm.newQuery(SpecificUser.class);
> > > query.setFilter("_UniqueIdentifier == TheUser");
> > > query.declareParameters("String TheUser");
>
> > > try {
> > > List<SpecificUser> results =
> > > (List<SpecificUser>)query.execute(ID);
>
> > > if(results.size() == 0)
> > > return null;
> > > else
> > > return results.get(0);
>
> > > } finally {
> > > query.closeAll();
> > > }
>
> > > I get the user just fine, and all the user's corresponding decks. But
> > > the decks have no cards. "Touching" the deck's cards collection with
> > > a .size() method doesn't load the cards, just returns 0, nor does
> > > setting the cards to the default fetch group. I also tried to set the
> > > pm's fetchplan to -1, but that didn't have the desired effect either.
>
> > > The weird thing is that if I persist the Deck without a parent user,
> > > then I will get the deck back, along with all its cards, with no
> > > problems.
>
> > > I've tried a lot of other things too and I'm starting to run low on
> > > ideas (and high on frustration), so any help would be appreciated.
>
> > > Thanks,
> > > Mike
--
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.