0

App EngineエンドポイントでHashmapを1つのプロパティとしてエンティティを作成しました。私は永続化のためにObjectifyを使用しています。私は正常にアンドロイド用のクライアントライブラリを生成しました。しかし、私がハントマップを受け入れる代わりにアンドロイドでそれを使用しようとしているときに、JsonMapを要求しています。エンティティクラスでハッシュマップは許可されていますか?はいの場合は、クラウドエンドポイントを使用してアクセスまたは保存する必要があります。App Engine Entityクラスのハッシュマップ

@Entity 
public class MyData { 
    @Id 
    Long id; 
    HashMap<String, Object> userInfo; 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public HashMap<String, Object> getUserInfo() { 
     return userInfo; 
    } 

    public void setUserInfo(HashMap<String, Object> userInfo) { 
     this.userInfo = new HashMap<>(userInfo); 
    } 
} 

答えて

0

通常、エンティティクラスでは、インタフェース 'マップ'を使用する必要があります。異なるAPIは、レコードを保持する異なるタイプの実装マップを使用します。例、Hibernateは 'PersistenceMap'を使います。そのAPIと同じように、異なるマップを使用することができます。しかし、とにかく、最終的には、java.util.Mapインターフェイスを実装する必要があります。したがって、参照を宣言するには、 'Map'インターフェースを使用する必要があります。

0

エンティティにHashMapが含まれている場合、Objectifyはそれを(docs)をEmbeddedEntityとして保持しますので、格納しても問題ありません。あなたのエンティティのこのプロパティをシリアル化してデシリアライズする方法は本当に問題です。

あなたが参照するJsonMapクラスとは何ですか、何を求めていますか? Cloud Endpointsで生成されたAndroidライブラリを使用していますか?

エンティティをJsonMapの作成に使用できる形式にシリアル化するには、custom transformer@ApiTransform)を作成する必要があります。または、それをJsonObjectと読んでそれを自分自身で逆シリアル化することもできます。あなたのHashMapの内容がどのくらい予測可能か(それは既知のキーセットを持っていますか?)

+0

はい私はアンドロイド用に生成されたライブラリを使用しており、hashmapのパラメータではなく、JsonMapオブジェクトを要求しています。 –