2

Objectify(2.2.3)は、文字列の@Embeddedリストを処理したくないようですが、すべてのドキュメントで可能であると記載されているようです。文字列は、変換が必要なカスタムオブジェクトであるかのように処理されます。最小限の例:

public class Test {
  @Id public Long id = null;
  @Embedded private List<String> strings = new ArrayList<String>();

  private Test() {}

  public Test(String[] in) {
    for (String s : in) {
      strings.add(s);
  }
}

このクラスのインスタンスは、次のように保存されます。

  Key: 7
  ID/Name: ahpzY2hlZHVsZS13aXRoLXlvdXItZnJpZW5kc3IKCxIEVGVzdBgHDA   
  strings.hash: [0, 0]

文字列はハッシュによって保存されることに注意してください。これは、文字列内の唯一の非最終フィールドです。

このコードは失敗します:

ObjectifyService.register(Test.class);
Test t = new Test(new String[] { "aa", "bb" });
Objectify ofy = ObjectifyService.begin();
ofy.put(t);
Test t2 = ofy.get(Test.class, t.id); //<-- fails with IllegalAccessException: Private fields can not be set on JRE classes.

私はここで何か間違ったことをしていますか?文字列の埋め込みリストはサポートされていませんか?

4

1 に答える 1

2

objectify-appengine google groupで学習したように、単純なタイプのリストには@Embeddedのマークを付けないでください。それらはその表記なしで永続化されます。@Embeddedは、複雑なユーザータイプ専用です。その牝馬を明確にするために、ドキュメントが更新されます。

于 2011-05-16T02:50:11.943 に答える