Google アプリ エンジン データストアを使用して列挙型のコレクションをロードする

StackOverflow https://stackoverflow.com/questions/1500643

  •  19-09-2019
  •  | 
  •  

質問

Java で Goole アプリ エンジン データストアを使用し、列挙型のリストを持つオブジェクトをロードしようとしています。オブジェクトをロードするたびに、List は null になります。オブジェクトは

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ObjectToSave {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private List<AnEnum> anEnumList;

    //public getters and setters
}

列挙型は単純です

public enum AnEnum {
    VALUE_1,
    VALUE_2;
}

保存するコードは

ObjectToSave objectToSave = new ObjectToSave();
List<AnEnum> anEnumList = new ArrayList<AnEnum>();
anEnumList.add(AnEnum.VALUE_1);
objectToSave.setAnEnumList(anEnumList);
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
    pm.makePersistent(objectToSave);
} finally {
    pm.close();
}

それをロードするコードは次のとおりです

PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
    Key key = KeyFactory.createKey(ObjectToSave.class.getSimpleName(), id);
    ObjectToSave objectToSave = pm.getObjectById(ObjectToSave.class, key);
} finally {
    pm.close();
}

次を使用してデータストア内のデータを表示できます http://localhost:8080/_ah/admin 私のリストは保存されていますが、オブジェクトがロードされたときにはリストが存在していないことがわかります。

Eclipse プラグインを使用してプロジェクトを作成しましたが、私の知る限り、データストア設定には何も変更していません。では、なぜ Enum リストが null なのでしょうか?

役に立ちましたか?

解決

はい、ただし、List フィールドはロード時にデフォルトのフェッチ グループに含まれていないため、ロードされません。読む JDOフェッチグループ. 。これを DFG に追加するか、カスタム フェッチ グループを有効にするか、PM を閉じる前にフィールドに「タッチ」するだけです。

--アンディ (データ核)

他のヒント

どのようにObjectToSaveのインスタンスを作成していますか?あなたがList<AnEnum>のインスタンスを作成し、anEnumListに割り当て(追加の)コードを持っていない限り、nullが予想されるように、すべてのインスタンス変数の参照型のデフォルト値は、nullになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top