Hello,
I tried to do a little test and wrote two classes:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Tenant {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
public Tenant(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setKey(Key key) {
this.key = key;
}
public Key getKey(){
return this.key;
}
}
and
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Account {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
@Persistent
private String description;
@Persistent
private String address;
...
}
I generate a set of Accounts, which belong to a tenant with this code:
PersistenceManager pm = PMF.get().getPersistenceManager();
KeyFactory.Builder keyBuilder = new KeyFactory.Builder
(Tenant.class.getSimpleName(), "TenantX121"); Key key =
keyBuilder.getKey();
Tenant tenant = new Tenant("TenantX121");
tenant.setKey(key);
pm.makePersistent(tenant);
for(int i = 1; i < 1001; i++){
keyBuilder = new
KeyFactory.Builder(Tenant.class.getSimpleName
(), "TenantX121");
keyBuilder.addChild(Account.class.getSimpleName(),
"acctid"+i);
Key acckey = keyBuilder.getKey();
Account acct = new Account(name, description,
address, ...);
acct.setKey(acckey);
pm.makePersistent(acct);
}
Now I want to query all Accounts that belong to a tenant:
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
Key k = KeyFactory.createKey(Tenant.class.getSimpleName(),
"TenantX121");
//Tenant e = pm.getObjectById(Tenant.class, k);
Query query = pm.newQuery(Account.class);
query.setFilter("Key == keyParam");
query.declareParameters("Key keyParam");
List<Account> accounts = (List<Account>)query.execute(k);
But unfortunately this doesn't work. In the documentation
http://code.google.com/appengine/docs/java/datastore/transactions.html
example they query on parent-pk, but it is not clear, what parent-pk
is (is it an attribute or a metadatafield). Of course I also tried to
query on parent-pk, but whatever I do, I receive this error:
javax.jdo.JDOException: Key
at
org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException
(NucleusJDOHelper.java:475)
...
NestedThrowablesStackTrace:
Key
org.datanucleus.exceptions.ClassNotResolvedException: Key
at org.datanucleus.util.Imports.resolveClassDeclaration(Imports.java:
194)
I've also tried to add
@Persistent
@Extension(vendorName="datanucleus", key="gae.parent-pk",
value="true")
private Key customerKey;
to my Accountclass, but this would only be used if I would like
appengine to generate the Primarykey of the child objects itself I
suppose.
What am I doing wrong?
--
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=.