Cada entidade no Datastore tem uma chave que a identifica de forma exclusiva. A chave é composta pelos seguintes componentes:
- O espaço de nomes da entidade, que permite a multilocação
- O tipo da entidade, que a categoriza para efeitos de consultas do Datastore
- Um caminho de antepassados opcional que localiza a entidade na hierarquia do Datastore.
Um identificador para a entidade individual, que pode ser
- Uma string de nome da chave
- um ID numérico inteiro
Uma vez que o identificador faz parte da chave da entidade, o identificador está associado permanentemente à entidade e não pode ser alterado. Atribui o identificador de uma das seguintes formas:
- Especifique a sua própria string de nome da chave para a entidade.
- Permitir que o Datastore atribua automaticamente à entidade um ID numérico inteiro.
Especificar um nome de chave para uma entidade
Para atribuir um nome de chave a uma entidade, indique o nome como o segundo argumento do construtor quando criar a entidade:
Para permitir que o Datastore atribua um ID numérico automaticamente, omita este argumento:
Atribuir identificadores
Pode configurar o Datastore para gerar IDs automáticos através de duas políticas de IDs automáticos diferentes:
- A política
default
gera uma sequência aleatória de IDs não usados que são distribuídos de forma aproximadamente uniforme. Cada ID pode ter até 16 dígitos decimais. - A política
legacy
cria uma sequência de IDs de números inteiros mais pequenos não consecutivos.
Se quiser apresentar os IDs das entidades ao utilizador e/ou depender da respetiva ordem, a melhor opção é usar a atribuição manual.
Usar caminhos de ascendentes
As entidades no Cloud Datastore formam um espaço estruturado hierarquicamente semelhante à estrutura de diretórios de um sistema de ficheiros. Quando cria uma entidade, pode, opcionalmente, designar outra entidade como respetiva principal. A nova entidade é uma secundária da entidade principal (tenha em atenção que, ao contrário de um sistema de ficheiros, a entidade principal não tem de existir efetivamente). Uma entidade sem um elemento principal é uma entidade raiz. A associação entre uma entidade e a respetiva entidade principal é permanente e não pode ser alterada depois de a entidade ser criada. O Cloud Datastore nunca atribui o mesmo ID numérico a duas entidades com o mesmo elemento principal ou a duas entidades raiz (as que não têm um elemento principal).
O principal de uma entidade, o principal do principal e assim sucessivamente, são os seus ancestrais; os seus secundários, os secundários dos secundários e assim sucessivamente, são os seus descendentes. Uma entidade raiz e todos os respetivos descendentes pertencem ao mesmo grupo de entidades. A sequência de entidades que começa com uma entidade de raiz e prossegue do elemento principal para o elemento secundário, conduzindo a uma determinada entidade, constitui o caminho do antepassado dessa entidade. A chave completa que identifica a entidade consiste numa sequência de pares de tipo-identificador que especificam o respetivo caminho de antepassados e terminam com os da própria entidade:
[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]
Para uma entidade raiz, o caminho de antepassados está vazio e a chave consiste apenas no tipo e no identificador da própria entidade:
[Person:GreatGrandpa]
Este conceito é ilustrado pelo diagrama seguinte:
Para designar o elemento principal de uma entidade, forneça a chave do elemento principal como um argumento
para o construtor
Entity()
ao criar a entidade secundária. Pode obter a chave chamando o método getKey()
da entidade principal:
Se a nova entidade também tiver um nome principal, forneça o nome principal como o segundo argumento para o construtor Entity()
e a chave da entidade principal como o terceiro argumento:
Gerar chaves
As aplicações podem usar a classe KeyFactory
para criar um objeto Key
para uma entidade a partir de componentes conhecidos, como o tipo e o identificador da entidade. Para uma entidade sem principal, transmita o tipo e o identificador (uma string de nome de chave ou um ID numérico) para o método estático KeyFactory.createKey()
para criar a chave. Os exemplos seguintes criam uma chave para uma entidade do tipo Person
com o nome da chave "GreatGrandpa"
ou o ID numérico 74219
:
Se a chave incluir um componente de caminho, pode usar a classe auxiliar KeyFactory.Builder
para criar o caminho. O método addChild
desta classe adiciona uma única entidade ao caminho e devolve o próprio criador, para que possa encadear uma série de chamadas, começando pela entidade raiz, para criar o caminho uma entidade de cada vez. Depois de criar o caminho completo, chame getKey
para obter a chave resultante:
A classe KeyFactory
também inclui os métodos estáticos keyToString
e stringToKey
para a conversão entre chaves e as respetivas representações de strings:
A representação de string de uma chave é "segura para a Web": não contém carateres considerados especiais em HTML ou em URLs.