3

Java で Goole アプリ エンジン データストアを使用しており、列挙型のリストを含むオブジェクトを読み込もうとしています。オブジェクトをロードするたびに、リストは 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 なのですか?

4

2 に答える 2

5

はい、しかしあなたのリストフィールドはロード時にデフォルトのフェッチグループにないため、ロードされません。JDO フェッチ グループを参照してください。それをDFGに追加するか、カスタムフェッチグループを有効にするか、PMを閉じる​​前にフィールドに「触れる」ことができます。

-- アンディ ( DataNucleus )

于 2009-10-08T10:14:10.847 に答える
1

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

于 2009-10-01T19:29:03.473 に答える