Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Roberto F.

Hibernate Annotation - FK

Recommended Posts

Boa tarde,

bom galera, estou com um seguinte problema

Tenho uma classe, cliente que recebe uma lista de contatos,

no Hibernate, consgui gerar as tabelas, corretamente, mas na insersão, não me parece certo.

 

Ele insere o Cliente e todos os contatos, mas não insere nada na tabela Cliente_Contato que foi gerada pelo Hibernate.

Alguém pode me ajusar!???

 

 

Segue Classes

 

@Entity
public class Cliente {
	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String sobrenome;
	private String email;
	private String senha;
	private String cpfCnpj;
	private String rgIe;

	@OneToMany(cascade = CascadeType.ALL)
	private List<Contato> contatos;

	
	public List<Contato> getContatos() {
		return contatos;
	}
	public void setContatos(List<Contato> contatos) {
		this.contatos = contatos;
	}

}

 

@Entity
public class Contato {
	@Id @GeneratedValue
	private Long id;
	private String endereco;
	private String numero;
	private String cep;
	private String bairro;
	private String cidade;
	private String uf;
	private String telefone;
	private String celular;
	
}

 

Contato c1 = new Contato();
		c1.setEndereco("r. aquidaban");
		c1.setUf("SP");
		
		Contato c2 = new Contato();
		c2.setUf("SP");
		
		
		
		List<Contato> contatos = new ArrayList<Contato>();
		contatos.add(c1);
		contatos.add(c2);
		
		
		Cliente cl = new Cliente();
		cl.setNome("Roberto");
		cl.setContatos(contatos);
		
		
		
		Session session = new HibernateUtil().getSession();
		session.save(cl);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está mapeando o campo chave da entidade Contato. Você só precisaria de uma tabela auxiliar "Cliente_Contato" se fosse um relacionamento n pra n. Mas creio não é o caso.

 

@Entity
public class Cliente {
        @Id
        @GeneratedValue
        private Long id;
        private String nome;
        private String sobrenome;
        private String email;
        private String senha;
        private String cpfCnpj;
        private String rgIe;
        @OneToMany(targetEntity=Contato.class, mappedBy="cliente", fetch=FechType.LAZY, cascade=CascadeType.ALL)
        private List<Contato> contatos;
}

@Entity
public class Contato {
        @Id
        @GeneratedValue
        private Long id;
        private String endereco;
        private String numero;
        private String cep;
        private String bairro;
        private String cidade;
        private String uf;
        private String telefone;
        private String celular;
        @ManyToOne(targetEntity=Cliente.class)
        private Cliente cliente;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei que eu pudessa ter Vários Contatos para Qualquer Classe de um sistema,

exemplo... Cliente tem Contato, Usuário tem COntato, e por ai vai..

Bom, OBrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou não

Ele inseriu o cliente, e o contato, mas no contato, na coluna cliente inseriu Null.

Acho que tem mais alguma coisa que eu estou fazendo errado

Será que é na insersão?!

 

List<Contato> contatos = new ArrayList<Contato>();
		contatos.add(c1);
		contatos.add(c2);
		
		
		Cliente cl = new Cliente();
		cl.setNome("Roberto");
		cl.setContatos(contatos);
		
		
		
		Session session = new HibernateUtil().getSession();
		session.save(cl);
		System.out.println("Cliente:" + cl.getId());
		session.close();
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei que eu pudessa ter Vários Contatos para Qualquer Classe de um sistema,

exemplo... Cliente tem Contato, Usuário tem COntato, e por ai vai..

Bom, OBrigado pela ajuda!

 

Sim, você pode ter este tipo de relacionamento se você quiser, ou achar necessário. Disse apenas que para este caso o ideal seria 1 pra n. Um cliente pode ter um ou mais endereços, mas a recíproca não pode ser verdadeira. Ou seja, um endereço não pode ter mais de um cliente.

 

Funcionou não

Ele inseriu o cliente, e o contato, mas no contato, na coluna cliente inseriu Null.

Acho que tem mais alguma coisa que eu estou fazendo errado

Será que é na insersão?!

 

List<Contato> contatos = new ArrayList<Contato>();
		contatos.add(c1);
		contatos.add(c2);
				
		Cliente cl = new Cliente();
		cl.setNome("Roberto");
		cl.setContatos(contatos);
		
		Session session = new HibernateUtil().getSession();
		session.save(cl);
		System.out.println("Cliente:" + cl.getId());
		session.close();
	}
Eu entendo o que está acontecendo. No momento em que você está inserindo objetos do tipo Contato na lista os mesmos ainda não têm referência com a entidade forte, que no caso é Cliente. Ou seja, você está inserindo objetos do tipo contato cujo atributo cliente tem valor nulo.

Tenta colocar essa propriedade no atributo Contatos da entidade Cliente.

@OneToMany(targetEntity=Contato.class, mappedBy="cliente", fetch=FechType.LAZY, cascade={CascadeType.MERGE,  CascadeType.PERSIST, CascadeType.REMOVE }) 
private List<Contato> contatos;
Talvez faça uma aplicação pra testar este cenário neste fim de semana. Se tu conseguires solucionar o problema dê um retorno aqui neste tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.