Запросить хранилище данных Google App Engine с помощью Key.Id - PullRequest
4 голосов
/ 03 сентября 2010

Я развертываю простое приложение Java в Google App Engine.

У меня есть простая сущность JPA, содержащая ключ в качестве моего сгенерированного идентификатора.

import javax.persistence.*;    

@Entity
public class MyEntity
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    private com.google.appengine.api.datastore.Key key;
...

Как только я сохранил этот объект,Я могу просмотреть идентификатор ключа следующим образом ...

long id = entity.getKey().getId();

Знаете ли вы, как я могу использовать тот же идентификатор, чтобы вернуть свою сущность?Примерно так ...

Query query = em.createQuery("SELECT e FROM MyEntity e WHERE e.key.id = :myId");
query.setParameter("myId", id);

Выше не работает.Я знаю, что могу вернуть его, передав ключ в качестве параметра, но я хотел бы знать, могу ли я использовать вместо него длинный идентификатор.

Ответы [ 4 ]

11 голосов
/ 03 сентября 2010

Нашли решение, создайте ключ с помощью KeyFactory и передайте идентификатор. Тогда запрос на ключ.

Key key = KeyFactory.createKey(MyEntity.class.getSimpleName(), id);
5 голосов
/ 03 сентября 2010

Нет необходимости выполнять запрос вообще, поскольку хранилище данных изначально поддерживает выборку сущности по ее ключу, что значительно быстрее, чем выполнение запроса.См. этот раздел документов.

0 голосов
/ 19 сентября 2016

В консоли администратора разработчика хранилища вы можете сказать что-то вроде:

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)

0 голосов
/ 15 сентября 2011

Вы, наверное, поняли это давным-давно, но для пользы других, вот как я делаю это в JPA:

entityManager.find(Reply.class, key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...