Problema com Herança no Hibernate 3

Estou tentando mapear herança no hibernate, considerando que na tabela filha(Funcionario), pode haver 1 ou + ocorrências de registros da tabela pai(Pessoa). Resumindo, uma pessoa pode ter várias matrículas(distintas) na tabela de Funcionario.

PessoaDTO.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
   PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="br.gov.rr.tj.sistemas.sarh.dto" schema="sarh">
<class name="PessoaDTO" table="rh_pessoal">

   <!-- Identificador -->
   <id name="cpf" column="pess_c_p_f" />
   
   <!-- Propriedades -->
   <property name="nome" column="pess_nome" />
   <property name="nascimento" column="pess_nascimento" />
</class>
</hibernate-mapping>

FuncionarioDTO.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
  PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="br.gov.rr.tj.sistemas.sarh.dto" schema="sarh">
  <joined-subclass name="FuncionarioDTO" extends="PessoaDTO"
    table="rh_funcionario">
   
    <key column="func_pess_c_p_f" />
   
    <!-- Propriedades -->
    <property name="matricula" column="func_cod_funcionario" />
    <property name="dataNomeacao" column="func_dat_nomeacao" />
    <property name="dataPosse" column="func_dat_posse" />
    <property name="dataInicioExercicio" column="func_dat_inic_exercicio" />
    <property name="dataDesligamento" column="func_dat_deslig" /> 
   
    <!-- Outras propriedades -->
    ...

  </joined-subclass>
</hibernate-mapping>

O Mapeamento acima, retorna a quantidade de registros correta, porém repete os registros para as Pessoas que possuem mais de uma matrícula.
Exemplo:
Pessoa: Fulano da Silva
Matrículas: 1 - Analista de Sistemas, 2 - Administrador
Neste caso retorna duas vezes a matricula 1 - Analista de Sistemas.

Agradeço a ajuda.

Então isso já deixa de ser hernça em java, porque isso é um caso de herança múltipla. Em Java, se você tem um objeto que é analista de sistemas, ele não pode ser também ao mesmo tempo Administrador.

Ou você muda isso pra que cada pessoa tenha vários “papéis” (usando composição), que seriam o Analista de Sistemas, Administrador e por aí vai ou continua com o memso problema. Mas esse campo aí não é chave primária (e estrangeira) da tabela não?

Como herança multipla se FuncionarioDTO só herda de PessoaDTO?

Tabela Pessoa(pess_c_p_f (pk) …)

Tabela Funcionario(func_matricula (pk),func_pess_c_p_f (fk)…)

Não tenho como mudar já que é um banco de um outro sistema legado. Além disso a modelagem está correta, não há necessidade de ter registros duplicados na tabela Pessoa. Uma pessoa pode passar pela empresa várias vezes assumindo cargos diferentes. Seus dados funcionais vão mudar (matricula, data de admissão …), mas as informações pessoais são as mesmas (nome, cpf).

Apesar de um registro da tabela de pessoa poder ter mais de um correspodente na tabela de funcionario, não deixa de ser herança simples já que FuncionárioDTO é uma especialização de PessoaDTO (e só de desta). Então não acho que seja por aí.

Acho que você mesmo não está entendendo o seu problema. Veja só, a partir do momento em que um uma pessoa pode ter várias matrículas distintas na tabela funcionário isso deixa de ser um relacionamento de herança simples, porque se ela fosse simples, só seria possível ter um único funcionário por pessoa.

O seu caso específico seria melhor modelado usando uma associação, onde cada Pessoa pode ter vários “papéis” de Funcionário.