Olá a todos, boa tarde!
Gostaria de ajuda referente a um problema que venho enfrentando.
Seria mesmo uma dúvida que tenho.
No caso eu tenho duas classes em Herança:
Unidade
-String Tipo;
-String Nome;
UnidadeEspecifica extends Unidade
-Unidade unidade;
-int Valor;
No banco de Dados, existe duas tabelas, uma para cada classe.
O problema está que quando faço a persistência, ele insere duas vezes o mesmo cadastro.
Eu faço da seguinte forma:
//Vo abreviar o código...
UnidadeEspecifica ue = new UnidadeEspecifica();
ue.setNome("nome");
ue.setTipo("tipo");
ue.setValor(5);
Unidade u = new Unidade();
u.setNome(ue.getNome);
u.setTipo(ue.getTipo);
u = dao.insertUnidade(u); // Esse método me retorna o objeto persistido de Unidade
ue.setUnidade(u);
dao.inserUnidadeEspecifica(ue);
No banco de dados ele gera dois cadastro na tabela Unidade e um cadastro na tabela UnidadeEspecifica que aponta para o ID do primeiro cadastro de Unidade.
Exemplo nas tabelas:
Tabela Unidade:
Id | Nome
1 | Cadastro 1
2 | Cadastro 1
Tabela UnidadeEspecifica:
Id | UNIDADE_ID
1 | 1
…
Desculpe se não fui muito claro.
Mas se alguém, por gentileza, puder me explicar porque isso ocorre, eu ficaria muito grato.
Pois sinceramente não sei o motivo disso acontecer. =/
Obrigado.
E como está o código desses métodos de insert?
Uma já extende da outra … teoricamente deveriam ser um insert só.
Mas o que vc está usando para fazer os inserts?
O código do insertUnidade:
[code] public static Unidade insertUnidade(ManagerDAO dao, Unidade unidade) throws ObjetoExistenteException {
Collection<Unidade> lista = listaUnidades(dao);
for(Unidade u : lista) {
if(u.getUnidade().equalsIgnoreCase(unidade.getUnidade())) {
throw new ObjetoExistenteException(“Unidade já cadastrada com este nome.”);
}
}
unidade.setAtivo(true);
System.out.println(“Inserindo nova ‘Unidade’”);
System.out.println("‘Unidade’: " + unidade.getUnidade());
Unidades uni = dao.merge(unidade);
return uni;
}[/code]
E o código da insertUnidadeEspecifica:
[code]public static UnidadeEspecifica insertUnidadeEspecifica(ManagerDAO dao, UnidadeEspecifica unidadeEspecifica) throws ObjetoExistenteException {
unidadeEspecifica.setAtivo(true);
System.out.println("Inserindo nova 'Unidade Especifica'");
System.out.println("'Unidade Especifica': " + unidadeEspecifica);
unidadeEspecifica = dao.merge(unidadeEspecifica);
return unidadesEspecifica;
}[/code]
…
Ahh, pra ficar claro, eu tenho uma classe pra auxiliar a classe DAO, onde que é dela que chamo os métodos acima, nela os métodoas acima estão:
public Unidade insertUnidade(Unidade unidade) throws ObjetoExistenteException, ServiceException {
return Unidade.insertUnidade(dao, unidade);
}
public UnidadeEspecifica insertUnidadeEspecifica(UnidadeEspecifica unidadeEspecifica) throws ObjetoExistenteException, ServiceException {
return UnidadeEspecifica.insertUnidadeEspecifica(dao, unidadeEspecifica);
}
…