Olá todos,
Eu criei 3 classes ClienteDTO, EnderecoDTO e TelefoneDTO com relacionamento de 1:1 em Cliente e Endereco e de 1:N em Cliente e Telefone.
O problema é o seguinte eu fiz o mapeamento de cliente com a classe endereco, funcionou belezinha. Quando excluia o cliente ele excluia o endereço. Só que eu criei a classe telefone e agora eu não consigo salvar os dados do telefone, eu percebi quando eu passo os dados do cliente ele vai também os dados do endereço. Eu acho que é isso q esta dando problema na hora de salvar. Alguém pode me ajudar?
Eu vou passar o codigo da minha classe.
ClienteDTO
@Entity
@Table(name = "cliente")
public class ClienteDTO extends DTO {
/**
*
*/
// private static final long serialVersionUID = 1L;
@Id
@Column(name = "codigo", nullable = false)
private Integer codigo;
@Column(name = "nome", nullable = false)
private String nome;
private String cnpj;
private String data;
private String obs;
@OneToOne
@JoinColumn(name="codigo")
private EnderecoDTO endereco;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
private List<TelefoneDTO> listTelefone;
EnderecoDTO
@Entity
@Table(name = "endereco")
public class EnderecoDTO extends DTO {
@Id
@Column(name = "id", unique = true, nullable = false)
private Integer id;
@Column(name = "rua", nullable = false)
private String rua;
@Column(name = "complemento")
private String complemento;
@Column(name = "cep")
private String cep;
@Column(name = "bairro")
private String bairro;
@Column(name = "cidade")
private String cidade;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "endereco")
private ClienteDTO cliente;
TelefoneDTO
@Entity
@Table(name = "telefone")
public class TelefoneDTO extends DTO {
@Id
@Column(name = "id", nullable = false)
private Integer id;
private Integer ddd;
@Column(name = "numero", nullable = false)
private String numero;
private String tipo;
@JoinColumn(name = "codCliente" )
@ManyToOne
private ClienteDTO cliente;
ClienteTeste
public class ClienteTeste {
public static void main(String args[]){
ClienteDTO clienteDTO = new ClienteDTO();
try{
clienteDTO.setCodigo(3);
clienteDTO.setNome("Ana");
clienteDTO.setObs("Muito Bom");
EnderecoDTO enderecoDTO = new EnderecoDTO();
enderecoDTO.setId(3);
enderecoDTO.setRua("Rua: BBBBBBBBBB");
enderecoDTO.setBairro("KKKKKKKKKK");
enderecoDTO.setCep("HHHHHHHHHH");
enderecoDTO.setCidade("YYYYYYY");
enderecoDTO.setComplemento("");
System.out.println("CodEnd: "+ enderecoDTO.getId());
clienteDTO.setEndereco(enderecoDTO);
//Tenta salvar o cliente no banco
System.out.println("Salvando ....");
//salva o cliente e o seu endereco
// DAOFactory.getClientePersistence().save(clienteDTO);
// //apaga o cliente e o seu endereco
System.out.println("CodEnd: "+ enderecoDTO.getCliente());
DAOFactory.getClientePersistence().save(clienteDTO);
//não precisa implementar
System.out.println("CodEnd: "+ enderecoDTO.getCliente());
DAOFactory.getEnderecoPersistence().save(enderecoDTO);
System.out.println("Salvo com sucesso ....");
}catch(Exception e){
System.out.println("Erro em salvar: "+e);
}
System.out.println("Listando ....");
//Tenta listar todos os dados no banco
try{
List<ClienteDTO> lista = DAOFactory.getClientePersistence().find(null);
for(ClienteDTO c :lista){
System.out.println();
System.out.println("Código: "+c.getCodigo());
System.out.println("Nome: "+c.getNome());
System.out.println("....Endereço ....");
Map<String,Object> request = new HashMap<String,Object>();
int cod = c.getCodigo();
System.out.println("cod: "+cod);
request.put("id", cod);
List<EnderecoDTO> list = DAOFactory.getEnderecoPersistence().find(request);
EnderecoDTO e = (EnderecoDTO) list.get(0);
System.out.println();
System.out.println("ID: "+e.getId());
System.out.println("Rua: "+e.getRua());
}
}catch(Exception e){
System.out.println("Erro em listar: "+e);
}
System.out.println("...............................");
try{
System.out.println("Salvando Dados Telefone...");
TelefoneDTO telefoneDTO = new TelefoneDTO();
telefoneDTO.setId(1);
telefoneDTO.setDdd(18);
telefoneDTO.setNumero("3644 8899");
telefoneDTO.setTipo("comercial");
telefoneDTO.setCodCliente(clienteDTO);
System.out.println("codigo cli: "+ telefoneDTO.getCodCliente());
DAOFactory.getTelefonePersistence().save(telefoneDTO);
System.out.println("Salvo com sucesso!");
System.out.println(); System.out.println();
System.out.println("Listando Dados Telefone...");
//listando os dados do telefone
/* List<TelefoneDTO> listat = DAOFactory.getTelefonePersistence().find(null);
for(TelefoneDTO t : listat){
System.out.println("Id: "+t.getId());
System.out.print("DDD: "+t.getDdd());
System.out.println(" Numero: "+t.getNumero());
System.out.println("Tipo: "+t.getTipo());
System.out.println("CodCli: "+t.getCodCliente());
System.out.println();
}*/
}catch(Exception e){
System.out.println("Salvar: "+e);
}
}
Mensagem de erro
13:01:34,406 INFO SessionFactoryImpl:161 - building session factory
13:01:34,906 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
Hibernate: /* get current state br.com.sisfarm.dto.ClienteDTO */ select clientedto_.codigo, clientedto_.nome as nome0_, clientedto_.cnpj as cnpj0_, clientedto_.data as data0_, clientedto_.obs as obs0_ from cliente clientedto_ where clientedto_.codigo=?
CodEnd: null
Hibernate: /* get current state br.com.sisfarm.dto.EnderecoDTO */ select enderecodt_.id, enderecodt_.rua as rua2_, enderecodt_.complemento as compleme3_2_, enderecodt_.cep as cep2_, enderecodt_.bairro as bairro2_, enderecodt_.cidade as cidade2_ from endereco enderecodt_ where enderecodt_.id=?
Salvo com sucesso ....
Listando ....
Hibernate: /* criteria query */ select this_.codigo as codigo0_2_, this_.nome as nome0_2_, this_.cnpj as cnpj0_2_, this_.data as data0_2_, this_.obs as obs0_2_, enderecodt2_.id as id2_0_, enderecodt2_.rua as rua2_0_, enderecodt2_.complemento as compleme3_2_0_, enderecodt2_.cep as cep2_0_, enderecodt2_.bairro as bairro2_0_, enderecodt2_.cidade as cidade2_0_, clientedto3_.codigo as codigo0_1_, clientedto3_.nome as nome0_1_, clientedto3_.cnpj as cnpj0_1_, clientedto3_.data as data0_1_, clientedto3_.obs as obs0_1_ from cliente this_ left outer join endereco enderecodt2_ on this_.codigo=enderecodt2_.id left outer join cliente clientedto3_ on enderecodt2_.id=clientedto3_.codigo
Código: 1
Nome: Ana
....Endereço ....
cod: 1
Hibernate: /* criteria query */ select this_.id as id2_2_, this_.rua as rua2_2_, this_.complemento as compleme3_2_2_, this_.cep as cep2_2_, this_.bairro as bairro2_2_, this_.cidade as cidade2_2_, clientedto2_.codigo as codigo0_0_, clientedto2_.nome as nome0_0_, clientedto2_.cnpj as cnpj0_0_, clientedto2_.data as data0_0_, clientedto2_.obs as obs0_0_, enderecodt3_.id as id2_1_, enderecodt3_.rua as rua2_1_, enderecodt3_.complemento as compleme3_2_1_, enderecodt3_.cep as cep2_1_, enderecodt3_.bairro as bairro2_1_, enderecodt3_.cidade as cidade2_1_ from endereco this_ left outer join cliente clientedto2_ on this_.id=clientedto2_.codigo left outer join endereco enderecodt3_ on clientedto2_.codigo=enderecodt3_.id where this_.id=?
ID: 1
Rua: Rua: XXXXXXXXXXX
Código: 2
Nome: Jorge
....Endereço ....
cod: 2
Hibernate: /* criteria query */ select this_.id as id2_2_, this_.rua as rua2_2_, this_.complemento as compleme3_2_2_, this_.cep as cep2_2_, this_.bairro as bairro2_2_, this_.cidade as cidade2_2_, clientedto2_.codigo as codigo0_0_, clientedto2_.nome as nome0_0_, clientedto2_.cnpj as cnpj0_0_, clientedto2_.data as data0_0_, clientedto2_.obs as obs0_0_, enderecodt3_.id as id2_1_, enderecodt3_.rua as rua2_1_, enderecodt3_.complemento as compleme3_2_1_, enderecodt3_.cep as cep2_1_, enderecodt3_.bairro as bairro2_1_, enderecodt3_.cidade as cidade2_1_ from endereco this_ left outer join cliente clientedto2_ on this_.id=clientedto2_.codigo left outer join endereco enderecodt3_ on clientedto2_.codigo=enderecodt3_.id where this_.id=?
ID: 2
Rua: Rua: MMMMMMMMMMMM
Código: 3
Nome: Ana
....Endereço ....
cod: 3
Hibernate: /* criteria query */ select this_.id as id2_2_, this_.rua as rua2_2_, this_.complemento as compleme3_2_2_, this_.cep as cep2_2_, this_.bairro as bairro2_2_, this_.cidade as cidade2_2_, clientedto2_.codigo as codigo0_0_, clientedto2_.nome as nome0_0_, clientedto2_.cnpj as cnpj0_0_, clientedto2_.data as data0_0_, clientedto2_.obs as obs0_0_, enderecodt3_.id as id2_1_, enderecodt3_.rua as rua2_1_, enderecodt3_.complemento as compleme3_2_1_, enderecodt3_.cep as cep2_1_, enderecodt3_.bairro as bairro2_1_, enderecodt3_.cidade as cidade2_1_ from endereco this_ left outer join cliente clientedto2_ on this_.id=clientedto2_.codigo left outer join endereco enderecodt3_ on clientedto2_.codigo=enderecodt3_.id where this_.id=?
ID: 3
Rua: Rua: BBBBBBBBBB
...............................
Salvando Dados Telefone...
codigo cli: br.com.sisfarm.dto.ClienteDTO{codigo=3, obs=Muito Bom, map={}, data=null, listTelefone=null, class=class br.com.sisfarm.dto.ClienteDTO, nome=Ana, cnpj=null, endereco=br.com.sisfarm.dto.EnderecoDTO{id=3, cidade=YYYYYYY, bairro=KKKKKKKKKK, complemento=, cep=HHHHHHHHHH, cliente=null, rua=Rua: BBBBBBBBBB, map={}, class=class br.com.sisfarm.dto.EnderecoDTO}}
Salvar: java.lang.ClassCastException: br.com.sisfarm.hao.EnderecoHAO cannot be cast to br.com.sisfarm.hao.TelefoneHAO