Mapear herança no Hibernate

To fazendo meu projeto final da faculdade e to empacado na hora de implementar herança no meu codigo, gostaria de saber se alguem pode me dar uma luz.

Acontece o seguinte tenho uma classe Pessoa com os dados que são comuns a funcionario e cliente e estou tentando usar a estrategia de mapeamento do hibernate a TABLE-PER-SUBCLASSES só que a duvida é onde eu faço o mapeamento, pois eu mapeei tudo na classe Pessoa, pois, por analogia tendo em vista a tag
Funcionario e cliente extendem de Pessoa

Vitor,
Poste o código do seu mapeamento e descreva exatamente (com a exception) o problema que está acontecendo. Assim fica mais fácil para o pessoal te ajudar

Oque ta acontecendo é o seguinte do jeito que esta, o hibernate ta dizendo que não ta encontrando mapeamento para Funcionario, ai se eu faço o mapeamento para funcionario ele diz que tem mapeamento duplicado para o mesmo …

Agradeço a ajuda.

TelaFuncionario.jsp

<s:form action="MantemFuncionario" method="POST" theme="simple">
<table bgcolor="gold" align="center">	
<tr>
	<td>
		Nome
	</td>
	<td>
		<s:textfield name="f.nome" />
	</td>
</tr>
<tr>
	<td>
		Telefone
	</td>
	<td>
		<s:textfield name="f.telefone"  />
	</td>
</tr>
<tr>
	<td>
		Celular
	</td>
	<td>		
		<s:textfield name="f.celular" />
	</td>
</tr>
<tr>
	<td>
		E-mail
	</td>
	<td>		
		<s:textfield name="f.email" />
	</td>
</tr>
<tr>
	<td>
		Endereço
	</td>
	<td>		
		<s:textfield name="f.endereco" />
	</td>	
</tr>
<tr>
	<td>
		Cargo
	</td>
	<td>
		
			<s:select name="f.cargo.nome"
					  headerKey="1"
					  headerValue="--Selecione o cargo"
					  listKey="nome"
					  listValue="nome"
					  list="#session.cargo"
					  value="%{f.cargo.nome}" />
	</td>
</tr>
<tr>
	<td>
		Area Conhecimento
	</td>
	<td>
		<s:checkboxlist name="f.ac" 
						list="#session.ac"
						listKey="codigo"
						listValue="descricao"
						value="{descricao}"
		/>
	</td>
</tr>
<tr>
	<td>Usuario</td>
	<td><s:textfield name="f.usuario" /> </td>
</tr>
<tr>
	<td>Senha</td>
	<td><s:textfield name="f.senha" /> </td>	
</tr>

<tr>
	<td colspan="2">		
		<s:submit name="comando" value="Cadastrar" />	
		<s:submit name="comando" value="Alterar" />
		<s:submit name="comando" value="Consultar" />
		<s:submit name="comando" value="Excluir" />
		<s:submit name="comando" value="Voltar" />
	</td>
</tr>
</table>

</s:form>

struts.xml

                                       ...
<action name="MantemFuncionario" class="action.ActionTelaFuncionario" method="execute">
       <result name="success">/TelaMensagem.jsp</result>
       <result name="input">/TelaFuncionario.jsp</result>
       <result name="error">/TelaErro.jsp</result>
       <result name="voltar">/TelaPrincipal.jsp</result>
                                      ...
</action>

ActionTelaFuncionario.java

public class ActionTelaFuncionario extends ActionSupport{

	private String comando;
	private Funcionario f;
	private List<AreaConhecimento> ac;
	

	@Override
	public String execute() throws Exception {
			
		try {
			DAOFuncionario daof = new DAOFuncionario();
			
			if (comando.equals("Cadastrar")) {
				daof.save(f);
				
			}
			if (comando.equals("Consultar")) {
				f=daof.find(f);
				return ActionSupport.INPUT;
			}
			if (comando.equals("Alterar")) {
				daof.update(f);
				
			}
			if (comando.equals("Excluir")) {
				daof.delete(f);
				
			}
			if (comando.equals("Voltar")) {
				return "voltar";
			}
			
			return ActionSupport.SUCCESS;
			
		} catch (Exception e) {
			e.printStackTrace();
			return ActionSupport.ERROR;
		}
}

DAOFuncionario.java

public class DAOFuncionario {

	private SessionFactory factory;

	public DAOFuncionario() {
		
		factory = new Configuration().addClass(Pessoa.class).addClass(Funcionario.class).addClass(Cargo.class).buildSessionFactory();
	}
	//save, update ...

Pessoa.hbm.xml

<hibernate-mapping package="modelo" default-lazy="true"> 

 <class name="modelo.Pessoa"
         table="pessoa">
     <id name="cod_pessoa"
         type="integer"
         unsaved-value="0">
       <generator class="increment"/>
     </id>

  	<property name="nome" column="nome" type="string" />
  	<property name="endereco" column="endereco" type="string" />
  	<property name="celular" column="celular" type="string" />
  	<property name="telefone" column="telefone" type="string" />
  	<property name="email" column="e-mail" type="string" />

  <joined-subclass name="modelo.Funcionario"
                   table="funcionario">
    <key column="id"/>
   		<property name="matricula" column="matricula" />
		<property name="usuario" column="usuario" />
		<property name="senha" column="senha" />
		<many-to-one name="cargo" class="modelo.Cargo" />
  </joined-subclass>
  </class>
</hibernate-mapping>

olá Vitor!!!

posso estar enganado, pois tenho 9 meses de experiencia.

tenta mapear pelo Funcionario, ficando dessa forma “Funcionario.hbm.xml” não precisando do “joined-subclass”, acrescentando as variaveis de pessoa e de funcionario.

no código xml ta errado, pelo codigo você crio uma tabela “Pessoa” no banco, que na verdade tem que criar Funcionario.

no name coloca o endereço inteiro onde fica a classe de modelo “Funcionario”.
na table tem que ser funcionario.

Cara agradeço parece que funcionou, só não consegui pois to com problema na combobox que quando dou submit na tela só da um reload na pagina e não envia nada para minha action