Google アプリ エンジン データストアを使用して列挙型のコレクションをロードする
-
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になります。
所属していません StackOverflow