Question

J'utilise le moteur d'application Goole datastore avec Java et en essayant de charger un objet avec une liste des énumérations. Chaque fois que je charge l'objet de la liste est nulle. L'objet est

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

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

    @Persistent
    private List<AnEnum> anEnumList;

    //public getters and setters
}

Le ENUM est simple

public enum AnEnum {
    VALUE_1,
    VALUE_2;
}

Le code pour l'enregistrer est

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();
}

Le code pour le charger est

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

Je peux voir les données dans le magasin de données en utilisant http: // localhost: 8080 / _ah / admin et peut voir ma liste a été enregistrée, mais ce n'est pas là quand l'objet est chargé.

J'ai créé mon projet avec le plugin Eclipse et n'ont pas apporté des modifications aux paramètres de datastore pour autant que je sais. Alors pourquoi id ma liste Enum null?

Était-ce utile?

La solution

Oui, mais votre champ de liste ne sont pas dans le groupe de récupération par défaut lors du chargement alors par conséquent n'est pas chargé. Lire JDO Fetch Groupes . Vous pouvez l'ajouter à la DFG, ou permettre à un groupe sur mesure chercher, ou tout simplement « toucher » le champ avant de fermer le PM.

- Andy ( DataNucleus )

Autres conseils

Comment allez-vous créer une instance de ObjectToSave? La valeur par défaut de tous les types de référence variables d'instance est nulle, sauf si vous avez du code (supplémentaire) pour créer une instance de List<AnEnum> et l'affecter à anEnumList, null qu'escompté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top