2012-02-21 7 views
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

答えて

0

"この目的のためのキーです。

+0

Idを文字列として取得することは問題ではなく、キーをjsonまたはxmlとしてマーシャリングすることは問題です。だから私は** idとjsonまたはxml **でエンティティを生成するための正しいパターンを探しています。 – GreenPepper

+0

あなたは何を意味するのかよく分かりません。キーが文字列であれば、それをシリアル化するのは簡単です... jsonをシリアライズするための多くのツール/フレームワークがあります。 jax-rs準拠のフレームワークであるJersey(http://jersey.java.net/)を使用します。あなたのニーズにはそれほど重すぎるかもしれませんが、使い方は簡単です。たくさんの人がresteasyも使っています:http://www.jboss.org/resteasy –

+0

これは私の質問ではありません。私はちょうど良いパターンを探していた。だから、私はちょうどIDを返すゲッターメソッドを追加する必要がありますか? – GreenPepper

関連する問題