Pergunta

I tem que usar a API de baixo nível a persistir uma entidade do tipo Value in Google App Engine. Eu tenho procurado e eu só encontrei alguns exemplos desta forma:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key k = KeyFactory.createKey(Value.class.getSimpleName(), id);
Entity entity = new Entity(k);
entity.setProperty("column1", value.getColumn1());
entity.setProperty("column2", value.getColumn2());
datastore.put(entity);

O meu problema é que eu não sei o ID (identificador de Valor) com antecedência, porque eu preciso dele para ser gerado como uma sequência. Seria a maneira de fazê-lo na baixa API nível, como é feito na JDO como:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

Como posso recuperar o id no nível baixo ou configurá-lo para ser gerado como uma seqüência?

Graças.

Foi útil?

Solução

A classe Entity tem muitos construtores. Use o que leva uma única corda - o nome tipo -. Eo ID será gerado para você quando você armazená-lo no armazenamento de dados

Outras dicas

Talvez tente usar "allocateIds" alocar um intervalo de IDs de usar? Isto lhe dará um conjunto de chaves reservados para uso. Eu duvido que você vai ser capaz de obter uma seqüência estrita, como em bancos de dados relacionais, mas pelo menos você seria capaz de obter garantido chaves únicas e úteis.

Consulte a documentação para DatastoreService:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/ DatastoreService.html # allocateIds% 28com.google.appengine.api.datastore.Key,% 20java.lang.String,% 20long% 29

Além disso, para mais orientações que você pode dar uma olhada em como DataNucleus usa esta API:

http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/valuegenerator/SequenceGenerator.java?r=473

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top