JDO difficulties in retrieving persistent vector
        Posted  
        
            by Michael Omer
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Michael Omer
        
        
        
        Published on 2010-06-16T20:19:33Z
        Indexed on 
            2010/06/16
            20:22 UTC
        
        
        Read the original article
        Hit count: 378
        
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
© Stack Overflow or respective owner