views:

470

answers:

1

I have owned one-to-many relationship between two objects:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class AccessInfo {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private com.google.appengine.api.datastore.Key keyInternal;  
    ...     
    @Persistent
    private PollInfo currentState;

    public AccessInfo(){}

    public AccessInfo(String key, String voter, PollInfo currentState) {
     this.voter = voter;
     this.currentState = currentState;
     setKey(key); // this key is unique in whole systme
    }

    public void setKey(String key) {
     this.keyInternal = KeyFactory.createKey(
       AccessInfo.class.getSimpleName(),
       key);
    }

    public String getKey() {
     return this.keyInternal.getName();
    }

and

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class PollInfo
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent(mappedBy = "currentState")
    private List<AccessInfo> accesses;
    ...

I created an instance of class PollInfo and make it persistence. It is ok. But then I want to load this group by AccessInfo key, and I am getting exception NucleusObjectNotFoundException. Is it possible to load a group by child's key?

A: 

Perhaps if you quote your code for retrieving the AccessInfo object and how you got the "key" that you used ?

DataNucleus
"Key" (for AccessInfo) is a random alphanumeric string with 12 characters. PersistenceManager pm = PMF.get().getPersistenceManager(); Transaction tx = pm.currentTransaction(); try { tx.begin(); AccessInfo ai; try { ai = pm.getObjectById(AccessInfo.class, KeyFactory.createKey( AccessInfo.class.getSimpleName(), key));
Solvek
Why not just print out what is "pm.getObjectId(ai)" when you persist the AccessInfo object ? and use that in the pm.getObjectById(id) call ? That way you can be sure of having the right key
DataNucleus