Question

J'ai deux classes dans une relation un à plusieurs. Le parent est Map et l’enfant est POI (point d’intérêt). J'essaie d'ajouter un POI à une carte existante, mais je reçois une exception lorsque j'essaie de conserver mes modifications. Voici les deux classes:

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

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

    @Persistent(mappedBy = "map")
    private List<Poi> pois;

    public List<Poi> getPois() {
        return pois;
    }
}

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

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

    @Persistent
    private Map map;

    public Map getMap() {
        return map;
    }
    public void setMap(Map map) {
        this.map = map;
    }
}

Et voici comment j'essaie de les utiliser:

PersistenceManager pm = PMF.get().getPersistenceManager();

// create a new POI
Poi poi = new Poi();

// find the Map by its ID
Map map = pm.getObjectById(Map.class, Long.decode(mapId));

// add the POI to the map
map.getPois().add(poi);

// persist!
pm.makePersistent(map);
pm.close();

La ligne "map.getPois (). add (poi);" lève une exception disant "java.lang.ClassCastException: java.lang.Long " mais ne me dit pas pourquoi. Si je le bascule sur "poi.SetMap (map);" cela échoue simplement en silence. Il n'y a pas de message d'erreur et rien ne se passe.

Quelqu'un sait-il comment gérer correctement une relation un à plusieurs dans App Engine? Est-ce que quelqu'un connaît de bonnes ressources? La la documentation de Google a été légèrement utile, mais elle fait vraiment défaut.

Était-ce utile?

La solution

La première chose à vérifier est que vous utilisez la version 1.2.2 du sdk. De nombreuses corrections / améliorations ont été apportées aux fonctionnalités enfants / parents dans cette version . Un problème qui a été corrigé semble beaucoup comme votre problème, ou du moins lié.

Si cela ne résout pas le problème, vérifiez que la classe dans laquelle vous utilisez le code ci-dessus est annotée @PersistenceAware, en supposant que ce n'est pas déjà @PersistenceCapable.

Si QUE ne résout pas le problème, pouvez-vous publier la classe complète à l'origine du problème (de préférence, réduisez au minimum le code qui reproduira l'exception) Dans votre extrait de Par exemple, nous ne voyons pas la carte originale créée ni enregistrée, et nous ne voyons pas d’où vient mapId.

Autres conseils

Je ne suis pas sûr que votre carte soit la meilleure abstraction ici. Et je ne sais pas ce qu'est Poi. Google me dit que c'est de la nourriture hawaïenne.

Mais Google me montre également comment effectuer un un à plusieurs unidirectionnel relation avec JDO. Je ne vois pas beaucoup d'annotations dans votre code. Est-ce ce que vous essayez de faire? Si c'est le cas, c'est peut-être ce qui vous manque.

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