0
をプロデュース:GAE:私はこのような実体を持ってdatastore.Keyとエンティティ(JSONやXMLなど)
:@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にシリアル化されないことがありますが、記事のIDが必要です。 idのlong型か、キーをラップする余分なフィールドを追加するか?あなたはこの問題のよりよい解決策を持っていますか?
、その後
com.google.appengine.api.datastore.KeyFactory.stringToKey
これらの作成および消費する「Webセーフcom.google.appengine.api.datastore.KeyFactory.keyToString
Idを文字列として取得することは問題ではなく、キーをjsonまたはxmlとしてマーシャリングすることは問題です。だから私は** idとjsonまたはxml **でエンティティを生成するための正しいパターンを探しています。 – GreenPepper
あなたは何を意味するのかよく分かりません。キーが文字列であれば、それをシリアル化するのは簡単です... jsonをシリアライズするための多くのツール/フレームワークがあります。 jax-rs準拠のフレームワークであるJersey(http://jersey.java.net/)を使用します。あなたのニーズにはそれほど重すぎるかもしれませんが、使い方は簡単です。たくさんの人がresteasyも使っています:http://www.jboss.org/resteasy –
これは私の質問ではありません。私はちょうど良いパターンを探していた。だから、私はちょうどIDを返すゲッターメソッドを追加する必要がありますか? – GreenPepper