Identificar registro no banco de dados ao inserir um objeto com hibernate

2 respostas
I

Galera, boa tarde. Estou com problema e espero que alguém possa me ajudar. Seguinte…

Estou desenvolvendo uma classe Pessoa que está associada a um Endereco.

Particularidades:
1- Um endereco pode estar associado a várias pessoas.
2- Na tabela o campo cep é único.

Quando eu gravo uma pessoa, como o endereço não existe no banco de dados, o hibernate cria o endereco tb.

Agora quando eu gravou outra pessoa, utilizando o mesmo endereço, o hibernate tenta gravar novamente o endereço, mas dah erro por causa que o cep é unico.

Ex.:

Endereco endereco1 = new Endereco(“RUA A”, “12345678”);
Pessoa pessoa1 = new Pessoa(“PESSOA A”, endereco1);

Session session = HibernateUtil.getSessionFactory().openSession();

Transaction t = session.beginTransaction();		

session.save(pessoa1);

t.commit();

session.close();

[GRAVA NORMAL E CRIA O ENDERECO…TUDO OK]

Endereco endereco2 = new Endereco(“RUA A”, “12345678”);
Pessoa pessoa2 = new Pessoa(“PESSOA B”, endereco2);

Session session = HibernateUtil.getSessionFactory().openSession();

Transaction t = session.beginTransaction();		

session.save(pessoa2);

t.commit();

session.close();

[DAH ERRO PORQUE O HIBERNATE TENTA GRAVAR O endereco2 QUE POSSUI O MESMO CEP QUE O endereco1]

A minha dúvida eh: Há alguma maneira de fazer com que o hibernate verifique se o objeto existe no banco não pelo id mas pelo cep no meu caso…

Espero ter sido claro…agradeço qq ajuda

2 Respostas

alberthy

[b]De acordo com sua lógica, você está dizendo que existe um cep para cada pessoa.

Está certo disso?

Onde você aplicaria essa lógica?

Você pode relacionar Pessoa com Endereço. Onde endereço irá conter o cep informado.

Abraço.[/b]

I

O que eu quiz informar é que eu posso ter o mesmo endereço para mais de uma pessoa…

Por exemplo…

Eu moro na RUA A CEP 12345678 e minha esposa tb mora na RUA A CEP 12345678.

No banco de dados eu teria uma tabela PESSOA com 2 registros e uma tabela ENDERECO com 1 registro.

Mas a questão é a seguinte…

Quando eu cadastro a primeira pessoa, o hibernate cria pra mim o endereço e quando eu cadastro a segunda pessoa, o hibernate tenta criar novamente o endereco RUA A, e aí dah erro porque o CEP é unique…

Pelo q eu entendi o hibernate identifica igualdade pelo atributo anotado com @Id. Teria como eu fazer com que o hibernate identificasse essa igualdade pelo CEP?

Criado 6 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 2
Participantes 2