Inserir tabela Pai e tabela Filho (Hibernate JPA)

Bom dia pessoal!

Estou com o seguinte problema tenho duas tabelas: Pessoa e Pessoatelefone onde Pessoatelefone contem todos o telefone da pessoa.

Estou usando hibernate jpa para inserir os dados mais quando eu insiro, são inseridos os dados na tabela Pessoa e Pessoatelefone mais a FK da tabela Pessoatelefone fica NULL.

Alguém pode me ajudar?

Pessoa.java

package model;
// Generated 10/12/2010 17:37:30 by Hibernate Tools 3.2.1.GA

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Pessoa generated by hbm2java
 */
@Entity
@Table(name = "PESSOA", schema = "TESTE")
@SequenceGenerator(name="PESSOA_SEQ", sequenceName="PESSOA_SEQ", allocationSize=1)
public class Pessoa implements java.io.Serializable {

    private int codigo;
    private String nome;
    private Character sexo;
    private Date datanascimento;
    private Set pessoatelefones = new HashSet(0);

    public Pessoa() {
    }

    public Pessoa(int codigo) {
        this.codigo = codigo;
    }

    public Pessoa(int codigo, String nome, Character sexo, Date datanascimento, Set pessoatelefones) {
        this.codigo = codigo;
        this.nome = nome;
        this.sexo = sexo;
        this.datanascimento = datanascimento;
        this.pessoatelefones = pessoatelefones;
    }

    @Id
    @Column(name = "CODIGO")
    @GeneratedValue(generator="PESSOA_SEQ", strategy=GenerationType.SEQUENCE)
    public int getCodigo() {
        return this.codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    @Column(name = "NOME", length = 50)
    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Column(name = "SEXO", length = 1)
    public Character getSexo() {
        return this.sexo;
    }

    public void setSexo(Character sexo) {
        this.sexo = sexo;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "DATANASCIMENTO", length = 7)
    public Date getDatanascimento() {
        return this.datanascimento;
    }

    public void setDatanascimento(Date datanascimento) {
        this.datanascimento = datanascimento;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "pessoa", targetEntity=Pessoatelefone.class)
    public Set getPessoatelefones() {
        return this.pessoatelefones;
    }

    public void setPessoatelefones(Set pessoatelefones) {
        this.pessoatelefones = pessoatelefones;
    }
}

Pessoatelefone.java

package model;
// Generated 10/12/2010 17:37:30 by Hibernate Tools 3.2.1.GA

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

/**
 * Pessoatelefone generated by hbm2java
 */
@Entity
@Table(name = "PESSOATELEFONE", schema = "TESTE")
@SequenceGenerator(name="PESSOATELEFONE_SEQ", sequenceName="PESSOATELEFONE_SEQ", allocationSize=1)
public class Pessoatelefone implements java.io.Serializable {

    private int codigopessoatelefone;
    private Pessoa pessoa;
    private String numerotelefone;

    public Pessoatelefone() {
    }

    public Pessoatelefone(int codigopessoatelefone) {
        this.codigopessoatelefone = codigopessoatelefone;
    }

    public Pessoatelefone(int codigopessoatelefone, Pessoa pessoa, String numerotelefone) {
        this.codigopessoatelefone = codigopessoatelefone;
        this.pessoa = pessoa;
        this.numerotelefone = numerotelefone;
    }

    @Id
    @Column(name = "CODIGOPESSOATELEFONE")
    @GeneratedValue(generator="PESSOATELEFONE_SEQ", strategy=GenerationType.SEQUENCE)
    public int getCodigopessoatelefone() {
        return this.codigopessoatelefone;
    }

    public void setCodigopessoatelefone(int codigopessoatelefone) {
        this.codigopessoatelefone = codigopessoatelefone;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CODIGOPESSOA")
    public Pessoa getPessoa() {
        return this.pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    @Column(name = "NUMEROTELEFONE", length = 20)
    public String getNumerotelefone() {
        return this.numerotelefone;
    }

    public void setNumerotelefone(String numerotelefone) {
        this.numerotelefone = numerotelefone;
    }
}

metodo salvar

 public void salvar() {


        Pessoa pessoa = new Pessoa();
        pessoa.setNome("Pessoa 1");

        pessoa.setPessoatelefones(new HashSet<Pessoatelefone>());

        Pessoatelefone telefone = new Pessoatelefone();
        telefone.setNumerotelefone("11-111111");
        
        pessoa.getPessoatelefones().add(telefone);

        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {

            emf = Persistence.createEntityManagerFactory("teste");

            em = emf.createEntityManager();

            em.getTransaction().begin();

            em.merge(pessoa);

            em.flush();

            em.getTransaction().commit();
        } catch (Exception e) {
            em.getTransaction().rollback();
        } finally {
            if (em != null) {
                em.close();
            }
            if (emf != null) {
                emf.close();
            }
        }
    }

tenta mudar a chave de pessoa de int para Integer ou Long

Nada também o que sera que pode ser?

No método salvar está assim :

em.merge(pessoa); 

Deveria ser assim:

em.persist(pessoa);

[quote=raf4ever]No método salvar está assim :

em.merge(pessoa); 

Deveria ser assim:

em.persist(pessoa); [/quote]

Então raf4ever, alterei pra persist mais mesmo assim a FK fica null, to quebrando a cabeça aqui!

Coloca isso no Lado 1-N:

@Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE

[quote=raf4ever]Coloca isso no Lado 1-N:

@Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE

[/quote]

Então ainda não funcionou quando eu coloquei isso ele esta salvando apenas na tabela Pessoa, eu mudei o cascade para ALL, daí ele inseri nas duas mais continua nao inserindo a FK.