Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

O arquivo populate.json (Endereço: src/main/java/app/populate.json) possui vários registros das entidades da estrutura de segurança do Cronapp, como User, Securable e Role. Seu objetivo é popular o Banco de dados do projeto com uma base de dados mínima. Assim, um projeto recém-criado no Cronapp pode ser imediatamente executado e sua aplicação será funcional, um usuário Administrador já estará disponível para logar (usuário e senha: "admin") nas aplicações web e mobile. 

Não é necessário manipular esse arquivo e não recomendamos que o faça, seu conteúdo é editável de forma low-code através da ferramenta Permissão de segurança. O relacionamento entre as classes e a estrutura de segurança do Cronapp são apresentados na documentação Permissão de segurança

Essa documentação apresenta a estrutura do arquivo populate.json apenas para conhecimento, mas não incentivamos a sua manipulação. Como se trata de um conteúdo high-code, a manipulação do código é de responsabilidade do usuário.


Aviso

Tenha cuidado ao adicionar publicamente seu projeto em sistemas de controle de versões, como GitHub, bitbucket, GitLab e outros, pois os dados informados no arquivo ficarão expostos.

Informações

O arquivo populate.json alimenta o Banco de dados sempre que o projeto é executado no Cronapp. Se algum dado contido no arquivo for alterado no Banco de dados, como mudar a senha do usuário Administrador de "admin" para "novaSenha", ao parar e executar (debug) o projeto novamente, a senha retornará ao valor padrão, "admin". Veja abaixo como contornar isso.

  • Em modo Debug: recomendamos renomear ou excluir o arquivo populate.json (Endereço: src/main/java/app/populate.json).
  • Exportar projeto (*.war): basta desmarcar a opção Auto Popular Dados na janela Opções de Geração de War (mais detalhes nas documentações Importar e exportar projetos ou Serviços de Cloud).


Image Added

Figura 1 - Arquivo populate.json


Nota
titleCampo password da tabela User

O valor do campo password da entidade User no arquivo populate.json já deve estar criptografado. Caso queira alterar esse valor, sugerimos que acesse a página de usuários da aplicação, insira um usuário e copie o hash gerado no campo password na tabela User do Banco de dados para alimentar o arquivo populate.json.

Estrutura

Nesse exemplo vamos mostrar como alimentar as entidades criadas no Diagrama de dados e como ocorre as interações de relacionamentos no arquivo populate.json.


Necessário:

  • Criar a camada de persistência das classes.
  • Para alimentar o campo id, sugerimos utilizar algum site para gerar UUID para os identificadores.

Entidade

O primeiro exemplo a ser utilizado será da classe "Anime" que não possui relacionamentos (Figura 2). Essa classe possui quatro campos:

  • id: tipo TEXTO.
  • titulo: tipo TEXTO.
  • episodio: tipo INTEIRO.
  • completo: tipo LÓGICO.


Image Added

Figura 2 - Classe sem relacionamento


Para inserir dados nessa classe através do arquivo, você precisa especificar a classe e todos os seus campos nos atributos do objeto JSON. Para indicar a classe, é necessário informar a chave "_class" e o seu valor será o "caminho" (Figura 2.2) onde encontra a classe ("<namespace>.<pacote>.<nomedaclasse>" - sem a extensão .java). No exemplo da figura 2.1, ele ficará do seguinte modo: "_class" : "app.entity.Anime".


Image Added

Figura 2.1 - Caminho: namespace.pacote.classe


Os demais atributos do objeto devem ser incluídos da mesma forma, através do par "chave":"valor". Além disso, os valores dos atributos da classe precisam estar em conforme com os tipos definidos, seguindo o padrão dos atributos JSON, ou seja, String possui aspas duplas, já Números e Boleano não (veja mais detalhes em JSON).

Introdução

Populate é um arquivo JSON que serve para popular automaticamente entidades JPA. Esse arquivo já é criado automaticamente nos projetos do Cronapp pois ele é utilizado com o intuito de popular a entidade User com os dados do admin e, com isso, poder dá acesso a página que somente os usuários autenticados podem utilizar. No entanto, caso queira adicionar outros dados para popular as tabelas automaticamente, fique a vontade.

Pré-condição:

Antes de utilizar o arquivo, tenha em mente duas coisas:

  • Ter criado a camada de persistência das classes;
  • Gerar UUID para os identificadores.
Aviso
titleImportante

Trabalhar com versionamento e realizar commits tornam esses dados que estão inseridos nesses arquivos expostos para todos que tiverem acesso.

Image Removed

Figura 1 - Arquivo populate.json

Utilizando o populate.json

Será apresentado um exemplo geral, utilizando uma classe sem nenhum relacionamento para demonstrar a estrutura de como realiza a inserção dos dados através desse arquivo. Após, serão apresentados exemplos para cada tipo de relacionamento para mostrar suas diferenças (ou suas especificações).

Estrutura básica

O primeiro exemplo a ser utilizado será da classe da Figura 2.1. Essa classe possui quatro campos:

  • id: tipo TEXTO;
  • titulo: tipo TEXTO;
  • episodio: tipo INTEIRO;
  • completo: tipo LOGICO.

Image Removed

Figura 2.1 - Classe sem relacionamento

Para inserir dados nessa classe através do arquivo, você precisa especificar a classe e todos os seus campos. Para indicar a classe, você adiciona a chave "_class" e o seu valor é o "caminho" (Figura 2.2) onde encontra a classe ("namespace.pacote.nomedaclasse" - sem a extensão .java). No exemplo da Figura 2.1, ele ficará do seguinte modo: "_class" : "app.entity.Anime"

Image Removed

Figura 2.2 - Caminho: namespace.pacote.nomedaclasse

"id": "7A0DCC99-668B-4E28-8EE0-90D607CDAB5D",Assim como a descrição da classe, os seus campos também são especificados da mesma maneira - por chave / valor. No entanto, a diferença fica por conta do _ (underline) que não existe nas chaves referenciadas do campo - como mostrado abaixo. Além disso, os valores dos campos precisam estar em conforme como o banco ler.

"titulo": "Naruto",

"episodio": 700,

"completo": true

Bloco de código
languagejs
themeConfluence
titleResultado final para a estrutura básica
{
	"_class" : "app.entity.Anime",
	"id": "7A0DCC99-668B-4E28-8EE0-90D607CDAB5D",
	"titulo": "Naruto",
	"episodio": 700,
	"completo": true
}

Duas coisas importantes a serem notadas são os colchetes e as vírgulas. O par de colchetes é usado uma única vez no arquivo, ele vai englobar todos objetos e cada objeto deve ser separado por vírgula.

Comportamento do arquivo para relacionamento 1-1 e 1-N

Tanto no relacionamento 1-1 quanto 1-N, a ordem como eles são apresentados no arquivo tem fundamental importância - pois o detalhe se encontra na chave estrangeira. O objeto que não possui a chave estrangeira deve ser inserido primeiro, para depois vim o objeto que possui a chave estrangeira. Por exemplo, na figura 2.3 a tabela cliente carrega a chave estrangeira da tabela carro, então no arquivo JSON precisa ser inserido o objeto carro para depois ser inserido o objeto cliente.

Image Removed

Figura 2.3 - Relacionamento 1-1

A inserção da chave estrangeira no objeto é bem simples também, basta indica o nome da chave estrangeira na classe e relacionar com o id da classe entre chaves. Na figura 2.3, a chave estrangeira recebe o nome da classe, então ele ficará do seguinte modo:

 "carro": {"id": "3AA6CAF2-ACB3-4A45-9C53-03FD2FE7A393"}


Bloco de código
languagejs
themeConfluence
titleResultado final do relacionamento 1-1para a estrutura básica
{
    	"_class" : "app.entity.CarroAnime",
    	"id": "3AA6CAF27A0DCC99-ACB3668B-4A454E28-9C538EE0-03FD2FE7A39390D607CDAB5D",
    "marca	"titulo": "LexusNaruto",
    "modelo	"episodio": "LFA"700,
    "placa	"completo": "DEB7I94"true
  },
  {
    "_class": "app.entity.Cliente",
    "id": "AF498375-FCC6-4197-8B04-C7F3EC7E8D2C",
    "nome": "Deborah",
    "cpf": "60694536032",
    "carro": {"id": "3AA6CAF2-ACB3-4A45-9C53-03FD2FE7A393"}
  }

Então, para cada par de objetos, primeiro precisa ser adicionado o objeto que não carrega a chave estrangeira para depois adicionar o objeto que a carrega.

Comportamento do arquivo para relacionamento N-M

Da mesma forma que o relacionamento 1-1 ou 1-N, os objetos que não possuem a chave estrangeira precisam ser adicionados primeiros para depois adicionar o objeto que a carrega - nesse caso, será o objeto referente a classe de associação. Por exemplo, para a figura 2.4, precisam ser adicionados no JSON os objetos referentes as classes Ator e Filme para depois adicionar o objeto referente a classe AtorFilme.

Image Removed

Figura 2.4 - Relacionamento N-M

A forma de inserir a chave estrangeira também é a mesma que no relacionamento 1-1 ou 1-N, mas nesse caso as chaves se encontram na classe AtorFilme - então ela ficará do seguinte modo:

"_class": "app.entity.AtorFilme",
"id": "9522FDA2-65E2-4E41-811C-22F2CBC818D7",
"ator": {"id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
"filme": {"id": "1C17F46F-F176-4E90-BABF-52AD3B3E4AEA"}

}


Duas coisas importantes (padrão JSON):

  • Como estamos enviando um array de objetos, o par de colchetes é usado uma única vez no arquivo, ele vai englobar todos os objetos.
  • Cada objeto e cada atributos devem ser separados por vírgulas.

Relacionamentos 1-1 e 1-N

Tanto no relacionamento 1-1 quanto 1-N, a ordem como são apresentados os objetos no arquivo populate.json tem fundamental importância, o objeto que possui a chave primária do relacionamento deve ser inserido primeiro e só depois o objeto que possui a chave estrangeira relacionada. Por exemplo, na figura 2.2 a tabela Cliente carrega a chave estrangeira da tabela Carro, dessa forma, no arquivo JSON, o objeto Carro precisa ser inserido primeiro que o objeto Cliente, evitando que seja inserido no banco uma chave estrangeira sem que exista ainda a chave primária da outra tabela.

Para saber mais sobre a tabela de relacionamentos 1-1 e 1-N no Cronapp, consulte a página: Relacionamento entre classes no CRUD


Image Added

Figura 2.2 - Relacionamento 1-1


Caso a ordem seja invertida, durante a execução do projeto será exibida no console uma exceção parecida com a do bloco abaixo:

Aviso
titleMensagem exibida em um banco H2 ao alimentar os relacionamentos na ordem invertida

Internal Exception: org.h2.jdbc.JdbcSQLException: Constraint "FK_CLIENTE_fk_carro" already exists; SQL statement: ALTER TABLE "CLIENTE" ADD CONSTRAINT "FK_CLIENTE_fk_carro" FOREIGN KEY (fk_carro) REFERENCES "CARRO" (id) [90045-197]


A inserção da chave estrangeira no objeto é bem simples, basta indica o nome da chave primária do outro objeto e o seu valor entre chaves. Na figura 2.2, a chave estrangeira recebe o nome da classe, então ele ficará do seguinte modo: 


Sintaxe:

"_class": "classe",
"chave primária da classe": "valor da chave primária",
"classe relacionada": {"chave primária da classe relacionada": "valor da chave primária"}


Bloco de código
language
Bloco de código
languagejs
themeConfluence
titleResultado final para do relacionamento n1-m1
{
    "_class": "app.entity.AtorCarro",
    "id": "66130FE83AA6CAF2-F8DCACB3-48874A45-B8159C53-A35E42EC0BB403FD2FE7A393",
    "atormarca": "Orlando Bloom"
  },
  {Lexus",
    "_classmodelo": "app.entity.FilmeLFA",
    "idplaca": "1C17F46F-F176-4E90-BABF-52AD3B3E4AEA",
    "titulo": "Piratas do CaribeDEB7I94"
  },
  {
    "_class": "app.entity.AtorFilmeCliente",
    "id": "9522FDA2AF498375-65E2FCC6-4E414197-811C8B04-22F2CBC818D7C7F3EC7E8D2C",
    "atornome": {"id"Deborah",
    "cpf": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"}"60694536032",
    "filmecarro": {"id": "1C17F46F3AA6CAF2-F176ACB3-4E904A45-BABF9C53-52AD3B3E4AEA03FD2FE7A393"}
  },
    {
    

Duplo relacionamento 1 - N

A figura abaixo mostra como fica os objetos do arquivo populate com o mesmo objeto se relacionando duas vezes com outra classe. Nesse caso, a classe Negocio só guarda as chaves estrangeiras da classe Pessoa.


Image Added

Figura 2.3 - Duplo relacionamento 1-N


Sintaxe:

"_class":

"

app.entity.Filme

classe",

"id


"chave primária da classe": "valor da chave primária",
"classe relacionada 1": {"chave primária da classe relacionada 1": "valor da chave primária 1"},
"classe relacionada 1": {"chave primária da classe relacionada 1": "valor da chave primária 2"}


Bloco de código
languagejs
themeConfluence
titleAutorrelacionamento N-M
{ "E5AE7B60-2EE9-4025-9021-5755510AFE21",
    "titulo": "O senhor dos anéis"
  },
  {
    "_class": "app.entity.AtorFilme",
    "id": "9522FDA2-65E2-4E41-811C-22F2CBC818D7",
    "ator_class": {"app.entity.Pessoa",
    "id": "66130FE867C9F4D1-F8DC2231-48874904-B81594DD-A35E42EC0BB4CDE0E888A17D"},
    "filmenome": {"idMayumi": "E5AE7B60-2EE9-4025-9021-5755510AFE21"}
  }

Exemplos usando autorrelacionamento

Da mesma forma que os relacionamento 1-1, 1-N e N-M, os autorrelacionamento seguem a mesma linha: primeiro insere os objetos que não carregam a chave. O detalhe tá na inserção da chave estrangeira, ela precisa ser a última a ser inserida no objeto.

Image Removed

Figura 2.5 - Classes com autorrelacionamento

O bloco abaixo mostra como fica os objetos do arquivo JSON para inserção de uma classe com autorrelacionamento 1-N, os dados são para o exemplo da Figura 2.5 (classe SNSD).

Bloco de código
languagejs
themeConfluence
titleAutorrelacionamento 1-N
{
    "_class": "app.entity.SNSD
  },
  {
    "_class": "app.entity.Pessoa",
    "id": "12033AAB-DC75-4E85-9994-80A74824FEDA",
    "nome": "Deborah"
  },
  {
    "_class": "app.entity.Pessoa",
    "id": "DB1A914C-32B6-4453-B773-83764D773F5B",
    "nome": "Rodrigo"
  },
   {
    "_class": "app.entity.Negocio",
    "id": "43A654F2-3736-448D-B645-8233FE2C066B",
    "comprador": {"id": "4863151567C9F4D1-F5322231-46744904-BF3094DD-7C0A3D92882CCDE0E888A17D"},
    "integrante": "Kim Taeyeon",
    "lider"vendedor": { "id": "48631515DB1A914C-F53232B6-46744453-BF30B773-7C0A3D92882C83764D773F5B"}
  },
  {
    "_class": "app.entity.SNSDNegocio",
    "id": "F7F1D934D7AE6195-EF30F31E-4FF24AF2-B6EBAC10-631A0E75DADE16A798165AA1",
    "integrantecomprador": {"Jessica Jung"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "lidervendedor": { "id": "48631515DB1A914C-F53232B6-46744453-BF30B773-7C0A3D92882C83764D773F5B"}
  },
  {
    "_class": "app.entity.SNSDNegocio",
    "id": "EAF777F3802254BF-3980F64A-43404185-A683B05A-91875813D6534373ECE31014",
    "integrantecomprador": {"id"Tiffany Hwang": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "lidervendedor": { "id": "4863151567C9F4D1-F5322231-46744904-BF3094DD-7C0A3D92882CCDE0E888A17D"}
  }
O bloco abaixo mostra como fica os objetos do arquivo JSON para inserção de uma classe com autorrelacionamento

Relacionamento N-M

, os dados são para o exemplo da Figura 2.5 (classe grupo).

Da mesma forma que o relacionamento 1-1 ou 1-N, os objetos que não possuem a chave estrangeira precisam ser adicionados primeiros para depois adicionar o objeto que a carrega - nesse caso, será o objeto referente a classe de associação. Por exemplo, para a figura 2.4, precisam ser adicionados no JSON os objetos referentes as classes Ator e Filme para depois adicionar o objeto referente a classe AtorFilme.


Image Added

Figura 2.4 - Relacionamento N-M


A forma de inserir a chave estrangeira também é a mesma que no relacionamento 1-1 ou 1-N, mas nesse caso as chaves se encontram na classe AtorFilme - então ela ficará do seguinte modo:

Sintaxe:

Bloco de código
languagejs
themeConfluence
titleAutorrelacionamento N-M
{

"_class": "classe associativa",
"chave primária da classe": "valor da chave primária",
"classe relacionada 1": {"chave primária da classe relacionada 1": "valor da chave primária 1"},
"classe relacionada 2": {"chave primária da classe relacionada 2": "valor da chave primária 2"}


Bloco de código
languagejs
themeConfluence
titleResultado final para relacionamento n-m
 "app.entity.Grupo",
    "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D",
    "grupo": "SNSD"
  },
  {
    "_class": "app.entity.Grupo",
    "id": "12033AAB-DC75-4E85-9994-80A74824FEDA",
    "grupo": "TTS"
  },
  {
    "_class": "app.entity.GrupoAtor",
    "id": "DB1A914C66130FE8-32B6F8DC-44534887-B773B815-83764D773F5BA35E42EC0BB4",
    "grupoator": "SMTownOrlando Bloom"
  },
   {
    "_class": "app.entity.GrupoGrupoFilme",
    "id": "43A654F21C17F46F-3736F176-448D4E90-B645BABF-8233FE2C066B52AD3B3E4AEA",
    "grupotitulo": {"id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"},Piratas do Caribe"
  },
  {
    "grupo_1class": {"app.entity.AtorFilme",
    "id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.GrupoGrupo",
    "id": "D7AE6195-F31E-4AF2-AC10-16A798165AA1",
    "grupo": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "grupo_1": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
9522FDA2-65E2-4E41-811C-22F2CBC818D7",
    "ator": {"id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
    "filme": {"id": "1C17F46F-F176-4E90-BABF-52AD3B3E4AEA"}
  },
    {
    "_class": "app.entity.Filme",
    "id": "E5AE7B60-2EE9-4025-9021-5755510AFE21",
    "titulo": "O Senhor dos Anéis"
  },
  {
    "_class": "app.entity.AtorFilme",
    "id": "9522FDA2-65E2-4E41-811C-22F2CBC818D7",
    "ator": {"id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
    "filme": {"id": "E5AE7B60-2EE9-4025-9021-5755510AFE21"}
  }


Auto relacionamento

Os objetos com auto relacionamentos devem ser iniciados com um objeto que não possua relacionamento ou que se relacione com ele mesmo, nesse caso, a inserção do atributo de chave estrangeira precisa ser inserida por último no objeto.

Para saber mais sobre a tabela de auto relacionamento no Cronapp, consulte a página: Relacionamento entre classes no CRUD.


Image Added

Figura 2.5 - Classes com auto relacionamento


Sintaxe:

"_class": "classe",
"chave primária da classe": "valor da chave primária",
"classe relacionada": {"chave primária da classe": "valor da chave primária"}


O bloco abaixo mostra como fica os objetos do arquivo JSON para inserção de uma classe com auto relacionamento 1-N, os dados são para o exemplo da Figura 2.5 (classe Grupo).


Bloco de código
languagejs
themeConfluence
titleAuto relacionamento 1-N
  {
    "_class": "app.entity.GrupoGrupoGrupo",
    "id": "802254BF48631515-F64AF532-41854674-B05ABF30-4373ECE310147C0A3D92882C",
    "grupointegrante": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"} "Kim Taeyeon",
	"grupo": "SNSD",
    "grupo_1lider": { "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"}
  }

Arquivo final

Por fim, vamos dá uma olhada em como ficará o conteúdo do populate.json com todos esses dados (contando com os dados do admin).

Bloco de código
languagejs
themeConfluence
titlePopulate.JSON
[
  48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.User.Grupo",
    "id": "F7F1D934-EF30-4FF2-B6EB-631A0E75DADE",
    "integrante": "Jessica Jung",
	"grupo": "SNSD",
    "lider": { "id": "304BF43E48631515-0E62F532-4F4A4674-8A63BF30-3F22D7AD46117C0A3D92882C"}
  },
  {
    "name_class": "adminapp.entity.Grupo",
    "loginid": "adminEAF777F3-3980-4340-A683-91875813D653",
    "passwordintegrante": "$2a$10$LjzpM1Q3VoAtG2dTCCabNuW0/amVPjL3Iyvyi2Dj7NP.HngtzSewu"
  },
  {
    "_classTiffany Young",
	"grupo": "app.entity.RoleSNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  }


Arquivo final

No bloco abaixo exibimos todos os objetos apresentados nesse documento. Não exibimos os objetos das entidades da estrutura de segurança do Cronapp.


Bloco de código
languagejs
themeConfluence
titlePopulate.JSON
linenumberstrue
collapsetrue
[Administrators",
    "user": { "id" : "304BF43E-0E62-4F4A-8A63-3F22D7AD4611" }
  },
  {
    "_class" : "app.entity.Anime",
    "id": "7A0DCC99-668B-4E28-8EE0-90D607CDAB5D",
    "titulo": "Naruto",
    "episodio": 700,
    "completo": true
  },
  {
    "_class": "app.entity.Carro",
    "id": "3AA6CAF2-ACB3-4A45-9C53-03FD2FE7A393",
    "marca": "Lexus",
    "modelo": "LFA",
    "placa": "DEB7I94"
  },
  {
    "_class": "app.entity.Cliente",
    "id": "AF498375-FCC6-4197-8B04-C7F3EC7E8D2C",
    "nome": "Deborah",
    "cpf": "60694536032",
    "carro": {"id": "3AA6CAF2-ACB3-4A45-9C53-03FD2FE7A393"}
  },
  {
    "_class": "app.entity.Ator",
    "id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4",
    "ator": "Orlando Bloom"
  },
  {
    "_class": "app.entity.Filme",
    "id": "1C17F46F-F176-4E90-BABF-52AD3B3E4AEA",
    "titulo": "Piratas do Caribe"
  },
  {
    "_class": "app.entity.AtorFilme",
    "id": "9522FDA2-65E2-4E41-811C-22F2CBC818D7",
    "ator": {"id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
    "filme": {"id": "1C17F46F-F176-4E90-BABF-52AD3B3E4AEA"}
  },
    {
    "_class": "app.entity.Filme",
    "id": "E5AE7B60-2EE9-4025-9021-5755510AFE21",
    "titulo": "O senhor dos anéis"
  },
  {
    "_class": "app.entity.AtorFilme",
    "id": "9522FDA2-65E2-4E41-811C-22F2CBC818D7",
    "ator": {"id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
    "filme": {"id": "E5AE7B60-2EE9-4025-9021-5755510AFE21"}
  },
  {
    "_class": "app.entity.SNSDGrupo",
    "id": "48631515-F532-4674-BF30-7C0A3D92882C",
    "integrante": "Kim Taeyeon",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.SNSDGrupo",
    "id": "F7F1D934-EF30-4FF2-B6EB-631A0E75DADE",
    "integrante": "Jessica Jung",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.SNSDGrupo",
    "id": "EAF777F3-3980-4340-A683-91875813D653",
    "integrante": "Tiffany Hwang Young",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.GrupoPessoa",
    "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D",
    "gruponome": "SNSDMayumi"
  },
  {
    "_class": "app.entity.GrupoPessoa",
    "id": "12033AAB-DC75-4E85-9994-80A74824FEDA",
    "gruponome": "TTSDeborah"
  },
  {
    "_class": "app.entity.GrupoPessoa",
    "id": "DB1A914C-32B6-4453-B773-83764D773F5B",
    "gruponome": "SMTownRodrigo"
  },
   {
    "_class": "app.entity.GrupoGrupoNegocio",
    "id": "43A654F2-3736-448D-B645-8233FE2C066B",
    "grupocomprador": {"id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"},
    "grupo_1vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.GrupoGrupoNegocio",
    "id": "D7AE6195-F31E-4AF2-AC10-16A798165AA1",
    "grupocomprador": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "grupo_1vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.GrupoGrupoNegocio",
    "id": "802254BF-F64A-4185-B05A-4373ECE31014",
    "grupocomprador": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "grupo_1vendedor": {"id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"}
  }
]

Nessa página

Índice