Carregando uma coleção de enumerações com Google armazenamento de dados do App Engine
-
19-09-2019 - |
Pergunta
Eu estou usando o armazenamento de dados do App Engine Goole com Java e tentar carregar um objeto com uma lista de Enums. Toda vez que eu carregar o objeto da lista é nulo. O objeto é
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ObjectToSave {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private List<AnEnum> anEnumList;
//public getters and setters
}
A enumeração é simples
public enum AnEnum {
VALUE_1,
VALUE_2;
}
O código para salvá-lo é
ObjectToSave objectToSave = new ObjectToSave();
List<AnEnum> anEnumList = new ArrayList<AnEnum>();
anEnumList.add(AnEnum.VALUE_1);
objectToSave.setAnEnumList(anEnumList);
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
pm.makePersistent(objectToSave);
} finally {
pm.close();
}
O código para carregar é
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
Key key = KeyFactory.createKey(ObjectToSave.class.getSimpleName(), id);
ObjectToSave objectToSave = pm.getObjectById(ObjectToSave.class, key);
} finally {
pm.close();
}
Eu posso ver os dados no armazenamento de dados usando http: // localhost: 8080 / _ah / admin e pode ver a minha lista foi salva, mas ele não está lá quando o objeto é carregado.
Eu criei o meu projecto com o Eclipse plug-in e não tiver feito alterações nas configurações de armazenamento de dados, tanto quanto eu sei. Então, por id meu Enum lista nulo?
Solução
Sim, mas seu campo de lista não está no padrão grupo buscar a carregar assim que, portanto, não é carregado. Leia JDO Fetch Grupos . Você pode adicioná-lo à DFG, ou ativar um costume buscar grupo, ou apenas "tocar" o campo antes de fechar a PM.
- Andy ( DataNucleus )
Outras dicas
Como você está criando uma instância de ObjectToSave? O valor padrão de todos os tipos de referência variável de instância é nulo, a menos que você tem o código (adicional) para criar uma instância de List<AnEnum>
e atribuí-la a anEnumList
, null seria esperado.