1

2 次元の ArrayList を永続化しようとすると、次のエラーが発生します。

java.lang.IllegalArgumentException: cng_content: java.util.ArrayList is not a supported property type.

2 つの配列リストを使用して行列の表現を作成し、それをデータ ストアに保持しようとしています。

    Key cngKey = KeyFactory.createKey("CNG", jsonCNG.cNGID);
    Entity cngEntity = new Entity("CNG", cngKey);
    cngEntity.setProperty("cng_name", jsonCNG.cNGName);
    cngEntity.setProperty("cng_type", jsonCNG.cNGType);
    cngEntity.setProperty("cng_content", cng);

コード スニペットの cng のタイプは次のとおりです。

ArrayList<ArrayList<String>>

最初に使った

ArrayList<HashMap<Byte,Boolean>>

オブジェクトのタイプとして。ただし、HashMaps が GAE データストアでサポートされていないことがわかりました。さらに、保存されたオブジェクトに対してクエリを実行するつもりはありません。それらを保存して取得するだけです。

4

3 に答える 3

1

エンティティのプロパティとして保存できる EmbeddedEntity を使用します。2D のみを使用しているため、EmbeddedEntity のプロパティとして各配列を設定します。キーは数値ですが、「1」、「2」、「3」などの文字列形式で表されます。

より具体的に:

Entity e = new Entity("2d");
EmbeddedEntity ee = new EmbeddedEntity();

ArrayList<String> x = new ArrayList<String>();
// add stuff to x

ArrayList<String> y = new ArrayList<String>();
// add stuff to y

ArrayList<String> z = new ArrayList<String>();
// add stuff to z

ee.setProperty("1", x);
ee.setProperty("2", y);
ee.setProperty("3", z);
e.setProperty("2dArray", ee);

テストせずにこれを入力したため、構文エラーがある可能性があります

于 2016-05-06T19:51:22.727 に答える
1

このsetProperty(name, value)メソッドは、サポートされている Java 型Collectionサポートされている Java 型 (これには が含まれますArrayList) を取ります。ただし、コレクション内のコレクションはサポートされている型ではありません。

これらは多値プロパティと呼ばれ、目的があります。コレクションの各値は独自のインデックス エントリを取得するため、クエリはコレクション内の値に基づいてエンティティを実際に見つけることができます。

あなたの場合、2D リストの 1 つの次元をバイト配列にシリアル化し、それを a 内に格納してBlobから、すべての blob を として格納するのが最適List<Blob>です。

于 2013-10-07T15:23:16.743 に答える
1

クエリを実行しない場合は、json またはその他のテキスト形式として永続化します。エンティティの最大サイズに注意してください。

于 2013-10-07T15:24:06.227 に答える