Query Google App Engine Datastore with Key.Id
I'm deploying a simple Java app to Google App Engine.
I have a simple JPA Entity containing a Key as my generated ID.
import javax.persistence.*;
@Entity
public class MyEntity
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private com.google.appengine.api.datastore.Key key;
...
Once I persisted this object. I can view the key's ID like so...
long id = entity.getKey().getId();
Do you know how I can I use the same Id to get my entity back? Something like this...
Query query = em.createQuery("SELECT e FROM MyEntity e WHERE e.key.id = :myId");
query.setParameter("myId"开发者_运维技巧, id);
The above doesn't work. I know I can get it back by passing in the Key as the parameter, but I'd like to know if I could use the long id instead.
Found the solution, create a Key using the KeyFactory and pass in the ID. Then Query on Key.
Key key = KeyFactory.createKey(MyEntity.class.getSimpleName(), id);
There's no need to do a query at all, as the datastore natively supports fetching an entity by its key, which is substantially faster than doing a query. See this section of the docs.
You probably figured this out ages ago, but for others' benefit, this is how I do it in JPA:
entityManager.find(Reply.class, key)
In the datastore developer's admin console, you can say something like:
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
精彩评论