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.