Постоянство JDO Google App Engine с дочерним полем HashMap - PullRequest
3 голосов
/ 08 января 2011

У меня есть родительский класс, и я хочу сохранить в нем HashMap. Однако каждый раз, когда я пытаюсь изменить этот HashMap, я получаю следующую ошибку:

PM org.datanucleus.store.appengine.MetaDataValidator checkForIllegalChildField ВНИМАНИЕ: Невозможно проверить отношение один ко многим com.monsters.server.MonUser.monsters

Есть идеи о чем? Вот код:

Это код родительского класса

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true") 
public class MonUser {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent(serialized="true", mappedBy = "owner")
    @Element(dependent = "true")
    private HashMap<String,Monster> monsters;

...

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Monster {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private MonUser owner;

...

Я попробовал все на странице appengine об отношениях, и, похоже, ничего не помогло. Любая информация будет чрезвычайно полезна!

P.S. Я получил его для работы с ArrayLists и т.п., но не с хэш-картами, хэш-таблицами, картами и т. Д. Если это вообще помогает.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

JDO поддерживает только следующие коллекции :

  • java.util.ArrayList<...>
  • java.util.HashSet<...>
  • java.util.LinkedHashSet<...>
  • java.util.LinkedList<...>
  • java.util.List<...>
  • java.util.Set<...>
  • java.util.SortedSet<...>
  • java.util.Stack<...>
  • java.util.TreeSet<...>
  • java.util.Vector<...>
0 голосов
/ 18 мая 2012

Вы можете сохранить HashMap с помощью:

@Persistent(serialized = "true", defaultFetchGroup="true")

см. JDO - HashMap во встроенном классе

Для обеспечения сохранения измененийвам всегда нужно создавать новый экземпляр HashMap, см. конец: http://gae -java-persistence.blogspot.de / 2009/10 / serialized-fields.html

...