Estou com uma dificuldade

10 respostas
java
U

Ola por favor ajude se puder

Tenho 3 classes, uma classe chamada ClienteJuridico que herda da classe Pessoa, porem tenho outra classe com o nome Contato, essa classe esta dentro da classe Pessoa dessa forma:

Contato contato = new Contato();

Contato tem get e set dentro da classe Pessoa também, porem quando vou colocar algum objeto dentro do atributo dessa forma:

ClienteJuridico clienteJuridico = new ClienteJuridico(); clienteJuridico.setNome("Jonas"); clienteJuridico.setAtivo(false); clienteJuridico.setContato(contato);
Nao consigo colocar nada dentro do setContato, única coisa que aparece e contato e nulo
Como resolvo isso?
Obrigado

10 Respostas

M

Será que você poderia enviar o código da sua classe para ficar mais claro? espero poder ajudar :slight_smile:

U

CLASSE PESSOA

public class Pessoa {

private boolean ativo;

public boolean isAtivo() {
	return ativo;
}

public void setAtivo(boolean ativo) {
	this.ativo = ativo;
}

Contato contato = new Contato();

public Contato getContato() {
	return contato;
}

public void setContato(Contato contato) {
	this.contato = contato;
}

}

##CLASSE CONTATO

public class Contato {

private String numeroUm;
private String numeroDois;

public String getNumeroUm() {
	return numeroUm;
}

public void setNumeroUm(String numeroUm) {
	this.numeroUm = numeroUm;
}

public String getNumeroDois() {
	return numeroDois;
}

public void setNumeroDois(String numeroDois) {
	this.numeroDois = numeroDois;
}

}

##CLASSE ClienteFisico
public class ClienteJuridico extends Pessoa {

private String nome;

public void setNome(String nome) {
	this.nome = nome;
}

public String getNome() {
	return nome;
}

}

##CLASSE QUE TESTA

import br.com.projeto.domain.ClienteJuridico;

import br.com.projeto.softVans.domain.Contato;

public class ClienteJuridicoTest {

public void salvar() {
	

	ClienteJuridico clienteJuridico = new ClienteJuridico();
	clienteJuridico.setNome("Jonas");
	clienteJuridico.setAtivo(false);
	clienteJuridico.setContato(contato);

}

}

U

Código postado

U

Alguém sabe?

T

Você teria que criar o contato na classe de teste, algo assim:

import br.com.projeto.domain.ClienteJuridico;
import br.com.projeto.softVans.domain.Contato;

public class ClienteJuridicoTest {
public void salvar() {
    ClienteJuridico clienteJuridico = new ClienteJuridico();
    clienteJuridico.setNome("Jonas");
    clienteJuridico.setAtivo(false);
    Contato contato = new Contato(); // contato criado antes de ser usado
    clienteJuridico.setContato(contato);

}
}

Abraço.

E

Vc pode usar um objeto do tipo contato mesmo.

Contato c = new Contato();
c.setNumeroUm(“123”);

cliente.setContato©;

ou, como vc já tem uma instancia de contato, vc pode usar o get dele e depois os sets
clienteJuridico.getContato().setNumeroUm(“123”);

U

Como salvaria isso no BD??
meu metodo de salvar e assim

public void salvar(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null;

try {
		transacao = sessao.beginTransaction();

		sessao.save(entidade);
		transacao.commit();
	} catch (RuntimeException erro) {
		if (transacao != null) {
			transacao.rollback();
		}
		throw erro;
	} finally {
		sessao.close();
	}
}`
I

Seria só vc receber o contato já populado com o cliente, como o @TerraSkilll disse
No método que vc posto do DAO, vc está recebendo uma entidade como parâmetro.
Isso se suas tabelas corresponderem né

U

Sim ela corresponde

S

Primeiro eu colocaria a classe Contato como Abstrata, pois esse negócio de qualquer classe poder instanciar um objeto contato pode furar a regra de negócio.

Apesar disso já temos o objeto Contato sendo Instanciado dentro de Pessoa, ou seja, mais um motivo para não instanciar ele em outro local.

Depois a classe Pessoa iria extender a classe Contato

public class Pessoa extends Contato{

Assim protegemos a classe contato e garantimos que somente Pessoa terá acesso à classe Contato.

Para acessar, conforme já foi falado:

clienteJuridico.getContato().setNumeroUm(“123”);

Ao meu ver essa forma é a mais correta de acessar obedecendo a Herança.

Criado 19 de março de 2016
Ultima resposta 28 de mar. de 2016
Respostas 10
Participantes 6