GAE с JPA и REST: создание сущности (в формате json или xml) с помощью хранилища данных. Ключ - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть такая сущность:

@Entity
@XmlRootElement
public class Article {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private com.google.appengine.api.datastore.Key key;
private String content;
private String title;
private Date created; 
private Date lastUpdate;

private boolean isActive;

   /* public getter and setters */
}

Теперь у меня есть оставшийся webserivce, который возвращает статьи:

@SuppressWarnings({ "unchecked", "unused" })
@GET
@Path("/{user}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<Article> getArtilceListByUser(@PathParam("user") String userName) {

    List<Article> articles = null;
    EntityManager em = EMF.get().createEntityManager();
    try {
        articles = (List<Article>) em.createQuery("SELECT FROM Article WHERE createdBy = :user AND isActive = true")
                    .setParameter("user", userName)
                    .getResultList();
        // lazy load is activated, but em is closed (find a better solution)
        for (Article article : articles) ;

    } finally {
        em.close();
    }

    return articles;
}

Проблема в том, что объект com.google.appengine.api.datastore.Key не может быть сериализован в json или xml, но мне нужен идентификатор статей ... Поэтому я должен использовать длинный тип для идентификатора или добавить дополнительныйполе, в которое оборачивается ключ?У вас есть лучшие решения для этой проблемы?

1 Ответ

0 голосов
/ 21 февраля 2012

com.google.appengine.api.datastore.KeyFactory.keyToString

, а затем

com.google.appengine.api.datastore.KeyFactory.stringToKey

Этидля этой цели создайте и используйте «websafe» ключи.

...