Dúvida com relacionamento entre tabelas - Hibernate

Pessoal,

Estou tentando persistir no BD os dados de um aluno, mas nao estou conseguindo e estou com bastante duvida na hora de usar as anotações de relacionamento do Hibernate.
Eu tenho uma classe Pessoa, com os dados pessoais desse aluno e uma outra classe Aluno, que herda os dados da classe Pessoa. Tenho tambem uma tabela Pessoa e outra tabela Aluno, nessa tabela aluno tenho o id da pessoa. Nao estou entendendo como vou salvar no mesmo formulario os dados pessoais do aluno e a matricula dele, e o Hibernate vai saber que alguns dados vao pra tabela aluno e outros pra tabela pessoa.
Fiz algumas coisas aqui e consegui salvar, mas apenas na tabela Pessoa, agora nao esta salvando mais nada.
Se alguem puder me ajudar, agradeço.

Pessoa.java:

[code]package teste.modelo;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToOne;

@Entity
public class Pessoa implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nome, email, celular;
private int cpf;
@OneToOne(cascade = CascadeType.ALL)
private Aluno aluno;

public Pessoa() {

...//getter e setters

}
[/code]

Aluno.java:

[code]package teste.modelo;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Aluno extends Pessoa implements Serializable {

@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String matricula;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id_pessoa", referencedColumnName = "id", table="pessoa")
private Pessoa Pessoa;

public Aluno() {
    super();
}

@Override
public int getId() {
    return id;
}

@Override
public void setId(int id) {
    this.id = id;
}


}
[/code]

AlunoAction:

[code]AlunoForm alunoForm = (AlunoForm) form;
Aluno aluno = new Aluno();
BeanUtils.copyProperties(aluno, alunoForm);
request.setAttribute(“aluno”, aluno);

    Session sessao = HibernateUtil.getSession();

    GenericDAO<Aluno> dao = new GenericDAO(sessao, Aluno.class);

    try
    {
        dao.Salvar(aluno);
    }
    catch (Exception e) {
        System.out.println(e.getMessage());
    }
    
    return mapping.findForward("sucesso");[/code]

[/code]

Oi Jefferson,

Se eu nao me engano existem 3 estrategias para tratar herança no Hibernate:

1º- Uma classe por tabela, cada classe ira possuir uma tabela propria no banco;

2º - Uma única tabela por hierarquia de classe, onde todos os dados de todas as subclasses ficam armazenados numa mesma tabela, diferenciados apenas por uma anotação, que ira discriminar os registros de acordo com a classe que ele representa. Annotation utilizada: @DiscriminatorValue;

3º - Uma Classe vinculada a superclasse, a superclasse possui uma tabela e a subclasse possui outra tabela, porem elas estão vinculadas através do Id. A primary key da superclasse, será uma foreign key e primary key na tabela da subclasse.

Link: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e849

Procura da uma estudada melhor para ver qual dessas estrategias você acha que se aplica melhor na sua solução. Particularmente eu acho que você deveria utilizar a ultima alternativa. No link acima você pode ver melhor como ela funciona. Essa solução está representada no item: 2.2.4.3. Joined subclasses.

[]'s

Valeu pela ajuda, eu uso a ultima alternativa mesmo, uma tabela para cada classe, aminha duvida eh se somente isso que fiz eh suficiente ou se devo colocar algum outro relacionamento ou alguma anotação a mais, tipo OneToMany, algo assim?
Entendeu?
Mas ja esta rodando, valeu pela ajuda