Pregunta

Tengo dos clases en una relación de uno a muchos. El padre es Map y el niño es POI (punto de interés). Estoy intentando agregar un PDI a un mapa existente, pero recibo una excepción cuando trato de persistir mis cambios. Aquí están las dos clases:

@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;
    }
}

Y así es como estoy tratando de usarlos:

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 línea " map.getPois (). add (poi); " produce una excepción que dice " java.lang.ClassCastException: java.lang.Long " Pero no me dice por qué. Si lo cambio a " poi.SetMap (mapa); " simplemente falla en silencio. No hay mensaje de error y no sucede nada.

¿Alguien sabe cómo manejar correctamente una relación uno a muchos en App Engine? ¿Alguien sabe de algún buen recurso? La documentación de Google ha sido ligeramente útil, pero realmente es deficiente.

¿Fue útil?

Solución

Lo primero que debe verificar es que está utilizando la versión 1.2.2 del sdk. En esta versión , se realizaron muchas correcciones / mejoras para la funcionalidad secundaria / principal. Un problema que se solucionó suena mucho como su problema, o al menos relacionado.

Si eso no soluciona el problema, verifique que la clase en la que está utilizando el código anterior esté anotada @PersistenceAware, suponiendo que aún no sea @PersistenceCapable.

Si ESO no soluciona el problema, ¿puede publicar la clase completa que está causando el problema (preferiblemente reducido al mínimo de código que reproducirá la excepción) en su extracto de ejemplo, no vemos que el mapa original se cree y guarde, y no vemos de dónde viene mapId.

Otros consejos

No estoy seguro de que su mapa sea la mejor abstracción aquí. Y no sé qué es Poi. Google me dice que es comida hawaiana.

Pero Google también me muestra cómo hacer un unidireccional unidireccional relación con JDO. No veo muchas anotaciones en su código. ¿Es eso lo que estás tratando de hacer? Si es así, tal vez eso es lo que te estás perdiendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top