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

Populate.json é um arquivo em formato JSON que serve para popular automaticamente entidades JPA. Esse arquivo já é criado automaticamente nos projetos do Cronapp, 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 à vontade.

Antes de utilizar o arquivo, você precisa ter preparado as seguintes situações:

  • Criado a camada de persistência das classes;
  • Algum programa ou site para gerar UUID para os identificadores.
Aviso
titleImportante

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.

Image Removed

Figura 1 - Arquivo
Informações

O arquivo populate.json

Nota
titleCampo password da tabela User

Caso queira utilizar o populate para a tabela User, saiba que o campo password é criptografado (é gerado um hash para a senha) pelo Cronapp. Dessa forma, sugerimos que acesse o formulário de CRUD User, insira usuários e copie o hash gerado no campo password na tabela User do banco de dados para alimentar o arquivo populate.json, caso contrário não conseguirá logar com o usuário cadastrado a partir do 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.2, ele ficará do seguinte modo: "_class" : "app.entity.Anime".

Image Removed

Figura 2.2 - Caminho: namespace.pacote.classe

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 dos campos - como mostrado abaixo. Além disso, os valores dos atributos inseridos na classe precisam estar em conforme com os tipos dos campos no banco.

 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).


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 (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

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: como estamos enviando um array de objetos, o par de colchetes é usado uma única vez no arquivo, ele vai englobar todos os objetos e cada objeto e também seus 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 tem fundamental importância - pois o detalhe se encontra na chave estrangeira. 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.3 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 autorrelacionamento relacionamentos 1-1 e 1-N no Cronapp, consulte a página: Relacionamento entre classes no CRUD


Image RemovedImage Added

Figura 2.3 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.
32, 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
languagejs
themeConfluence
titleResultado final do relacionamento 1-1
{
    "_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"}
  }

Relacionamento N-M

Da mesma forma que o

Duplo 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.

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": "classe",
"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
{
    "_class": "app.entity.Pessoa",
    "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D",
    "nome": "Mayumi"
  },
  {
    "_class": "app.entity.Pessoa",
    "id": "12033AAB-DC75-4E85-9994-80A74824FEDA",
    "nome": "Deborah"
  

Da mesma forma que o relacionamento 1-1 ou 1-N, os objetos que possuem a chave primária precisam ser adicionados primeiros para depois adicionar o objeto com a chave estrangeira do relacionamento - nesse caso, será o objeto referente a classe de associação. Para o exemplo da 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": "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
{
    "_class": "app.entity.Ator",
    "id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4",
    "ator": "Orlando Bloom"
  },
  {
    "_class": "app.entity.FilmePessoa",
    "id": "1C17F46FDB1A914C-F17632B6-4E904453-BABFB773-52AD3B3E4AEA83764D773F5B",
    "titulonome": "Piratas do CaribeRodrigo"
  },
   {
    "_class": "app.entity.AtorFilmeNegocio",
    "id": "9522FDA243A654F2-65E23736-4E41448D-811CB645-22F2CBC818D78233FE2C066B",
    "atorcomprador": {"id": "66130FE867C9F4D1-F8DC2231-48874904-B81594DD-A35E42EC0BB4CDE0E888A17D"},
    "filmevendedor": {"id": "1C17F46FDB1A914C-F17632B6-4E904453-BABFB773-52AD3B3E4AEA83764D773F5B"}
  },
    {
    "_class": "app.entity.FilmeNegocio",
    "id": "E5AE7B60D7AE6195-2EE9F31E-40254AF2-9021AC10-5755510AFE2116A798165AA1",
    "titulocomprador": {"id"O Senhor dos Anéis"
  }: "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.AtorFilmeNegocio",
    "id": "9522FDA2802254BF-65E2F64A-4E414185-811CB05A-22F2CBC818D74373ECE31014",
    "atorcomprador": {"id": "66130FE812033AAB-F8DCDC75-48874E85-B8159994-A35E42EC0BB480A74824FEDA"},
    "filmevendedor": {"id": "E5AE7B6067C9F4D1-2EE92231-40254904-902194DD-5755510AFE21CDE0E888A17D"}
  }
Autorrelacionamento

Relacionamento N-M

Da mesma forma que

os

o relacionamento 1-1

,

ou 1-N

e N-M

,

os autorrelacionamento seguem a mesma linha: primeiro insere

os objetos que não

carregam

possuem a chave

. O detalhe tá na inserção da chave estrangeira, ela precisa ser a última a ser inserida no objeto.

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:

"_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
{
    "_class": "app.entity.Ator",
    "id": "66130FE8-F8DC-4887-B815-A35E42EC0BB4

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

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 Grupo).

Bloco de código
languagejs
themeConfluence
titleAutorrelacionamento 1-N
  {
    "_class": "app.entity.Grupo",
    "id": "48631515-F532-4674-BF30-7C0A3D92882C",
    "integrante": "Kim Taeyeon",
	"grupo": "SNSD",
    "liderator": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}Orlando Bloom"
  },
  {
    "_class": "app.entity.GrupoFilme",
    "id": "F7F1D9341C17F46F-EF30F176-4FF24E90-B6EBBABF-631A0E75DADE52AD3B3E4AEA",
    "integrantetitulo": "JessicaPiratas do JungCaribe"
  },
	"grupo  {
    "_class": "SNSDapp.entity.AtorFilme",
    "lider": { "id": "486315159522FDA2-F53265E2-46744E41-BF30811C-7C0A3D92882C22F2CBC818D7"}
  },
  {
  "ator":  {"_classid": "app.entity.Grupo"66130FE8-F8DC-4887-B815-A35E42EC0BB4"},
    "filme": {"id": "EAF777F31C17F46F-3980F176-43404E90-A683BABF-91875813D65352AD3B3E4AEA"}
  },
    "integrante{
    "_class": "Tiffany Youngapp.entity.Filme",
	"grupo    "id": "SNSDE5AE7B60-2EE9-4025-9021-5755510AFE21",
    "lidertitulo": "O Senhor dos Anéis"
  },
  {
    "id_class": "48631515-F532-4674-BF30-7C0A3D92882C"}
  }

O bloco abaixo mostra como fica os objetos do arquivo JSON para inserção de uma classe com autorrelacionamento N-M, os dados são para o exemplo da Figura 2.5 (classe Pessoa). A classe negocio só guarda as chaves estrangeiras da classe pessoa.

Bloco de código
languagejs
themeConfluence
titleAutorrelacionamento N-M
{
    "_class": "app.entity.Pessoa",
    "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D",
    "nome": "Mayumi"
  },
  {
    "_class": "app.entity.Pessoa",
    "id": "12033AAB-DC75-4E85-9994-80A74824FEDA",
    "nome": "Deborah"
  },
  {
    "_class": "app.entity.Pessoa",
    app.entity.AtorFilme",
    "id": "DB1A914C9522FDA2-32B665E2-44534E41-B773811C-83764D773F5B22F2CBC818D7",
    "nomeator": "Rodrigo"
  },
   {
    "_class": "app.entity.Negocio",
    "id": "43A654F266130FE8-3736F8DC-448D4887-B645B815-8233FE2C066BA35E42EC0BB4"},
    "compradorfilme": {"id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"},
    "vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    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":

"

app.entity.Negocio

classe",

"id


"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
 "D7AE6195-F31E-4AF2-AC10-16A798165AA1",
    "comprador": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.NegocioGrupo",
    "id": "802254BF48631515-F64AF532-41854674-B05ABF30-4373ECE310147C0A3D92882C",
    "compradorintegrante": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"} "Kim Taeyeon",
	"grupo": "SNSD",
    "vendedor": {"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
linenumberstrue
collapsetrue
[
  lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.UserGrupo",
    "id": "304BF43EF7F1D934-0E62EF30-4F4A4FF2-8A63B6EB-3F22D7AD4611631A0E75DADE",
    "nameintegrante": "Jessica Jung",
	"grupo": "adminSNSD",
    "loginlider": "admin",
    "password{ "id": "$2a$10$LjzpM1Q3VoAtG2dTCCabNuW0/amVPjL3Iyvyi2Dj7NP.HngtzSewu"48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.RoleGrupo",
    "id": "AdministratorsEAF777F3-3980-4340-A683-91875813D653",
    "integrante": "Tiffany Young",
	"grupo": "SNSD",
    "userlider": { "id" : "304BF43E48631515-0E62F532-4F4A4674-8A63BF30-3F22D7AD46117C0A3D92882C" }
  }


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
[,
  {
    "_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.Grupo",
    "id": "48631515-F532-4674-BF30-7C0A3D92882C",
    "integrante": "Kim Taeyeon",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.Grupo",
    "id": "F7F1D934-EF30-4FF2-B6EB-631A0E75DADE",
    "integrante": "Jessica Jung",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.Grupo",
    "id": "EAF777F3-3980-4340-A683-91875813D653",
    "integrante": "Tiffany Young",
	"grupo": "SNSD",
    "lider": { "id": "48631515-F532-4674-BF30-7C0A3D92882C"}
  },
  {
    "_class": "app.entity.Pessoa",
    "id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D",
    "nome": "Mayumi"
  },
  {
    "_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": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"},
    "vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.Negocio",
    "id": "D7AE6195-F31E-4AF2-AC10-16A798165AA1",
    "comprador": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "vendedor": {"id": "DB1A914C-32B6-4453-B773-83764D773F5B"}
  },
  {
    "_class": "app.entity.Negocio",
    "id": "802254BF-F64A-4185-B05A-4373ECE31014",
    "comprador": {"id": "12033AAB-DC75-4E85-9994-80A74824FEDA"},
    "vendedor": {"id": "67C9F4D1-2231-4904-94DD-CDE0E888A17D"}
  }
]

Nessa página

Índice