Boa noite galera!
Tenho uma dúvida simples.
Tenho três classes e três entidades no banco de dados.
Sendo: Pessoa.java, Endereço.java e Telefones.java.
Minha classe Pessoa.java tem os atributos.
Inteiro: IdPessoa, Endereço_idEndereço e Telefones_idTelefones.
String: Nome, pai, mae e e-mail.
Minha classe Endereço.java tem os atributos.
Inteiro: idEndereço.
String: Endereço, bairro, cidade e estado.
Minha classe Telefones.java tem os atributos.
Inteiro: idTelefones.
String: Residencial, comercial e celular.
Dessa forma, fiz a conexão com banco, e já fiz as ‘telas’ do programa.
Salvo primeiro o endereço, depois salvo o telefone.
Na hora de salvar a pessoa, eu estou inserindo manualmente no meu código, o código do endereço e dos telefones para funcionar corretamente.
Como eu faço para resolver esse problema?
Valeu!
Na verdade, tua modelagem é que está equivocada. Gravar o id não é o ideal, tá bem longe de ser OO o teu código.
Pra “corrigir” isso, terias que colocar não o id, mas uma agregação entre estas classes. A gravação é uma consequencia.
Se possível, usando um framework pra ORM, como o Hibernate.
Abraço!
Cara,
Solução 1:
- Na tua tela de cadastro de Pessoa você coloca um Combo Box, Pick List ou algo semelhante para selecionar o Endereço e outro pra selecionar o Telefone.
Solução 2: - Na mesma tela de cadastro de Pessoa você coloca os campos de Endereço (Endereço, Bairro, Cidade e Estado) e Telefone (Residencial, Comercial e Celular);
- Salva primeiro o Endereço e Telefone, pega os ids gerados para essas tabelas e atribui na Pessoa (Endereço_idEndereço e Telefones_idTelefones).
Abraço.
Valeu pela resposta!
Sobre o hibernate, vou dar uma lida.
Mas a sua solução 2 isaiaspf me agradou muito.
Como eu faço pra receber do banco o id do endereço e do telefone e inserir na minha classe pessoa?
Pois, o meu ‘programa’ está assim. Tudo na mesma tela, Pessoa, endereço e telefone. Fica mais fácil para operar.
Abraço.
O que você está usando para fazer a persistência dos dados? JDBC?
No caso de ser JDBC, usando PreparedStatement, segue o exemplo:[code]…
String sql = “INSERT INTO…”;
PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
preparedStatement.executeUpdate();
ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
if(generatedKeys.next())
{
generatedKeys.getInt(1); // Esse cara retona a chave gerada.
}[/code]Tendo a chave gerada é só setar na tua classe Pessoa. Para funcionar, os ids chaves das suas tabelas devem estar como ‘auto_increment’.
Abraço.