Problema de instancia de classe e loop

10 respostas
javaspringhibernate
E

Olá a todos. tenho o seguinte problema.
Tenho a classe A que pode ter um numero indeterminado de instancias da classe B.
Exemplo: no formulario de cadastro o usuario ira definir quantos telefones irá cadastrar.

Pra isso uma terceira classe, instancia A, instancia B e depois faz referencia de FK entre as duas.

Se for manualmente, consigo fazer, exemplo:

ClasseA classeA = new ClasseA (parametros do construtor.)
ClasseB classeB = new ClasseB(parametros do construtor.).

classeA.getClasseB().addAll(Arrays.asList(classeB));
classeB.getClasseA().addAll(Arrays.asList(classeA));

Acontece que dessa forma há um numero definidos da ClasseB (nesse caso UMA apenas.)
Queria algo indefinido.
Tentei um foreach mas sem sucesso. Alguém pode ajudar?

10 Respostas

darlan_machado

E o que acontece se, para cada classeB em classeA, você chamar

classeA.getClasseB().add(classeB);
classeA.getClasseB().add(outraClasseB);
classeA.getClasseB().add(maisUmaClasseB);

???

E

Entao vai adicionando normalmente. Mas dessa forma tenho que informar quantas classesB serão.

Exemplo:

ClasseA classeA = new ClasseA (parametros do construtor.)
ClasseB classeB = new ClasseB(parametros do construtor.).
ClasseB classeB2 = new ClasseB(parametros do construtor.).
ClasseB classeB3 = new ClasseB(parametros do construtor.).

classeA.getClasseB().addAll(Arrays.asList(classeB, classeB2, classeB3));

classeB.getClasseA().addAll(Arrays.asList(classeA));

classeB2.getClasseA().addAll(Arrays.asList(classeA));

classeB3.getClasseA().addAll(Arrays.asList(classeA));

E nao queria dessa forma. Queria com foreach pois assim nao precisso definir o numero de instancias “na mão” como nesse exemplo, 3 istancias de classeB. Queria algo do tipo

foreach(ClasseB x : ???){

???

}

os ??? é que não sei como fazer.

darlan_machado

Da onde tirou isso, cara?
Estamos falando de um ArrayList e não de um ClasseB[]

Para cada telefone a ser cadastrado, você pode fazer, simplesmente, um

classeA.getClasseB().add(new ClasseB(...));

Entendeu?

E

darlan, na verdade ainda estou meio perdido.

Vou colocar o meu código e se puder ajuda, agradeço demais

Estou na classe PessoaFisicaService e segue o método de inserir:

Telefone telefone = new Telefone(pessoaFisicaDTO.getNumeroDeTelefone());

Cliente cliente = new PessoaFisica(pessoaFisicaDTO.getNome(), pessoaFisicaDTO.getCpf(), pessoaFisicaDTO.getRg());

((PessoaFisica) cliente).getTelefones().addAll(Arrays.asList(telefone));
telefone.getPessoasFisicas().addAll(Arrays.asList((PessoaFisica) cliente));

Novamente, dessa maneira apenas um telefone é inserido por cliente. E queria que fosse um numero indefinido.

darlan_machado

Você disse que o cliente vai definir a quantidade de telefones num formulário, não?
Como pretende passar isso ao backend?

E
No momento estou testando com o postman com o json. Fica assim:

{

varios campos : "varios valores passados,

numeroDeTelefone : 9999-9999

}
e gostaria que fosse assim:

{

varios campos : "varios valores passados,

arrayDeTelefone :

[

{numeroDeTelefone : 9999-9999},

{numeroDeTelefone : 8888-8888},

{numeroDeTelefone : 7777-777},

{ repete n vezes}

}

Ja na parte web, o formulário campo de telefone, terá um + para criar um novo campo de telefone e adicionar mais números.

darlan_machado

Independente disso, você já vai receber um array de telefones. Então eu não entendi qual a dúvida.

E

A dúvida é que nao estou conseguindo salvar mais de um telefone. como explicado acima.
Eu sei que vou receber um array, porém nao consigo criar objetos telefone de acordo com o numero de telefones passados.
Estou me perdendo nisso. Sei apenas criar UM telefone.
Voce deu a dica

classeA.getClasseB().add(new ClasseB(…));

porem como farei
classeB.getClasseA().add(new ClasseA()); sendo que o numero de classeB é variavel. pode ser 1 ou podem ser 4, ou 3.
Estou me perdendo nessa parte.

perceba que no codigo que passei, apenas um é instanciado:
essa linha:
Telefone telefone = new Telefone(pessoaFisicaDTO.getNumeroDeTelefone());

darlan_machado

Entendi o que você está fazendo de errado.
Primeiro, adeque as classes Cliente e PessoaDTO e defina não apenas um, mas uma lista de telefones.
Então isso

Pode passar para isso

Depois, ao invés disso:

Itere sobre a lista e vá inserindo os telefones no array.

E

Fiz o seguinte:

no DTO ao invés de ser:

String numeroTelefone

mudei para

private List < Telefone > telefones;

e criei o metodo:

public void adicionaTelefoneLista(String numeroTelefone){

telefones.add(new Telefone(numeroTelefone);

}

ai na classe service ao invés desse codigo no metodo de inserir, que tem como parametro pessoaFisicaDTO:
Telefone telefone = new Telefone(pessoaFisicaDTO.getNumeroDeTelefone());

coloquei

foreach(Telefone x : pessoaFisicaDTO.adicionaTelefoneLista()){

((PessoaFisica) cliente).getTelefones().addAll(Arrays.asList(x));

x.getPessoasFisicas().addAll(Arrays.asList((PessoaFisica) cliente));

}

porem deu Erro 415 Unsupported media type

Criado 22 de junho de 2018
Ultima resposta 22 de jun. de 2018
Respostas 10
Participantes 2