Persistência gerando 2 cadastro do mesmo objeto

3 respostas
Mstanguine

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.

3 Respostas

ViniGodoy

E como está o código desses métodos de insert?

aluisiodsv

Uma já extende da outra … teoricamente deveriam ser um insert só.

Mas o que vc está usando para fazer os inserts?

Mstanguine

O código do insertUnidade:

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;
	}

E o código da insertUnidadeEspecifica:

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;
	}

...

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);
	}

...

Criado 17 de janeiro de 2013
Ultima resposta 17 de jan. de 2013
Respostas 3
Participantes 3