JDO difficulties in retrieving persistent vector
- by Michael Omer
I know there are already some posts regarding this subject, but although I tried using them as a reference, I am still stuck.
I have a persistent class as follows:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class GameObject implements IMySerializable{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
protected Key m_databaseKey;
@NotPersistent
private final static int END_GAME_VAR = -1000;
@Persistent(defaultFetchGroup = "true")
protected GameObjectSet m_set;
@Persistent
protected int m_databaseType = IDatabaseAccess.TYPE_NONE;
where GameObjectSet is:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
@FetchGroup(name = "mySet", members = {@Persistent(name = "m_set")}) 
public class GameObjectSet {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
private Vector<GameObjectSetPair> m_set;
and GameObjectSetPair is:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class GameObjectSetPair {    
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
private String key;
@Persistent(defaultFetchGroup = "true")
private GameObjectVar value;
When I try to fetch the entire structure by fetching the GameObject, the set doesn't have any elements (they are all null)
I tried adding the fetching group to the PM, but to no avail.
This is my fetching code
    Vector<GameObject> ret = new Vector<GameObject>();
    PersistenceManager pm = PMF.get().getPersistenceManager();
    pm.getFetchPlan().setMaxFetchDepth(-1);
    pm.getFetchPlan().addGroup("mySet"); 
    Query myQuery = pm.newQuery(GameObject.class);
    myQuery.setFilter("m_databaseType == objectType");
    myQuery.declareParameters("int objectType");
    try {
        List<GameObject> res = (List<GameObject>)myQuery.execute(objectType);
        ret = new Vector<GameObject>(res);
        for (int i = 0; i < ret.size(); i++) {
            ret.elementAt(i).getSet();
            ret.elementAt(i).getSet().touchSet();
        }
    } catch (Exception e) {
    } finally {
        pm.close();
    }
Does anyone have any idea?
Thanks
Mike