Persistência gerando 2 cadastro do mesmo objeto

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