To identify my JDO objects in Google App Engine I use the Key
type. It works fine but when I need to pass this through urls it gets sort of long.
For example: http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA
When viewing my entities in my admin viewer I can see that the data-store also sets an "id" for my entity object, which seems to be an incremental numeric value, which is quite short compared to the Key string. Can I use this to grab information on my object? How do I do this? I tried using getObjectbyId()
with the id instead of the key... it doesn't work.
Any ideas?
Yes, you can do that. Whenever you need to get the ID you can use the following method call. Assume you are using an object of the entity class User
named user
: user.getKey().getId()
. The id is of type long
. See the JavaDoc of com.google.appengine.api.datastore.Key
for more information.
Whenever you have the ID you can build the Key
from it and then simply query for the object.
Key key = KeyFactory.createKey("User", id);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
User user = datastore.get(key);
You will need to define the id in your Entity as a primary key:
private class MyObject implements Serializable{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
}
Then you can try this:
long id = someObject.getId();
MyObject mo = getPM().getObjectById(MyObject.class, id);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With