Как добавить дочерний объект к родителю с помощью App Engine?

StackOverflow https://stackoverflow.com/questions/1219449

  •  10-07-2019
  •  | 
  •  

Вопрос

У меня есть два класса в отношениях один-ко-многим. Родителем является Map, а дочерним - POI (точка интереса). Я пытаюсь добавить POI к существующей карте, но я получаю исключение, когда пытаюсь сохранить свои изменения. Вот два класса:

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

А вот как я пытаюсь их использовать:

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

Строка " map.getPois (). add (poi); " выдает исключение, в котором говорится "java.lang.ClassCastException: java.lang.Long" но не говорит мне почему. Если я переключу его на «poi.SetMap (map)»; это просто молча терпит неудачу. Нет сообщения об ошибке и ничего не происходит.

Кто-нибудь знает, как правильно обрабатывать отношения один-ко-многим в App Engine? Кто-нибудь знает какие-нибудь хорошие ресурсы? документация Google была слегка полезной, но в действительности ее не хватает.

Это было полезно?

Решение

Первое, что нужно проверить, это то, что вы используете версию 1.2.2 sdk. В этом выпуске было сделано множество исправлений / улучшений для дочерних / родительских функций. Одна проблема звучит очень много нравится ваша проблема или, по крайней мере, связана.

Если это не решит проблему, убедитесь, что класс, в котором вы используете вышеуказанный код, аннотирован @PersistenceAware, при условии, что он еще не @PersistenceCapable.

Если THAT не устранил проблему, вы можете опубликовать полный класс, который вызывает проблему (желательно сократить до минимума кода, который будет воспроизводить исключение) В вашем отрывке для Например, мы не видим, как создается и сохраняется исходная карта, и не видим, откуда берется mapId.

Другие советы

Я не уверен, что ваша Карта - лучшая абстракция здесь. И я не знаю, что такое Пои. Google говорит мне, что это гавайская еда.

Но Google также показывает мне как сделать однонаправленную связь один-ко-многим отношения с JDO. Я не вижу много-много аннотаций в вашем коде. Это то, что вы пытаетесь сделать? Если это так, возможно, это то, что вам не хватает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top