Как добавить дочерний объект к родителю с помощью App Engine?
-
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. Я не вижу много-много аннотаций в вашем коде. Это то, что вы пытаетесь сделать? Если это так, возможно, это то, что вам не хватает.