Inserção HIbernate JPA

2 respostas
A

Boa tarde galera!

Estou com a seguinte dúvidas eu tenho 2 entidades no banco de dados, Pessoa e PessoaTelefone, onde PessoaTelofone contem todos os telefones da Pessoa já fiz o mapeamento os POJOS mais eu só consigo inserir dados da Pessoa nao estou conseguindo inserir dados na PessoaTelefone, quando eu coloco os dados de telefone retorna uma exception>:

09/12/2010 14:41:54 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: Unsuccessful: alter table TESTE.PESSOATELEFONE add constraint FK88F6C791EA1271AC foreign key (CODIGOPESSOA) references TESTE.PESSOA
09/12/2010 14:41:54 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: ORA-02275: esta restrição referencial  existe na tabela

Abaixo os Pojos:

package model;
// Generated 09/12/2010 10:05:24 by Hibernate Tools 3.2.1.GA

import java.util.Date;
import java.util.List;
import java.util.ArrayList;
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 String sexo;
    private Date datanascimento;

    private List<Pessoatelefone> pessoatelefones = new ArrayList<Pessoatelefone>();

    public Pessoa() {
    }

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

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

    @Id
    @GeneratedValue(generator="PESSOA_SEQ", strategy=GenerationType.SEQUENCE)
    @Column(name = "CODIGO")
    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 String getSexo() {
        return this.sexo;
    }

    public void setSexo(String 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(mappedBy = "pessoa", targetEntity = Pessoatelefone.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    public List getPessoatelefones() {
        return this.pessoatelefones;
    }

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


package model;
// Generated 09/12/2010 10:05:24 by Hibernate Tools 3.2.1.GA

import java.math.BigDecimal;
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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * 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 BigDecimal codigopessoatelefone;
    private Pessoa pessoa;
    private String numerotelefone;

    public Pessoatelefone() {
    }

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

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

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

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

    @ManyToOne(targetEntity = Pessoa.class, 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;
    }
}

Abaixo como tento inserir

public void salvar() {

        Pessoa pessoa = new Pessoa();
        pessoa.setNome("Pessoa 1");
        pessoa.setSexo("M");
        
        List<Pessoatelefone> listaTelefone = new ArrayList<Pessoatelefone>();
        
        Pessoatelefone telefone = new Pessoatelefone();
        telefone.setNumerotelefone("11-11111111");
        listaTelefone.add(telefone);

        telefone = new Pessoatelefone();
        telefone.setNumerotelefone("22-22222222");
        listaTelefone.add(telefone);

        pessoa.setPessoatelefones(listaTelefone);

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

            emf = Persistence.createEntityManagerFactory("teste");

            em = emf.createEntityManager();

            em.getTransaction().begin();

            em.persist(pessoa);

            em.flush();

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

Alguém poderia me ajudar?

Valeu.

2 Respostas

quebrado

Blz,
Verifica se o hibernate.hbm2ddl.auto ta habilitado no seu hibernate.properties.
Se tiver desabilta ele.
t+

A

quebrado:
Blz,
Verifica se o hibernate.hbm2ddl.auto ta habilitado no seu hibernate.properties.
Se tiver desabilta ele.
t+

Então no meu caso o arquivo é o persistence.xml ele esta assim:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt;
    &lt;persistence-unit name="teste" transaction-type="RESOURCE_LOCAL"&gt;
        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
        &lt;class&gt;model.Pessoa&lt;/class&gt;
        &lt;properties&gt;
            &lt;property name="hibernate.connection.username" value="teste"/&gt;
            &lt;property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/&gt;
            &lt;property name="hibernate.connection.password" value="teste"/&gt;
            &lt;property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.0.15:1521:orcl"/&gt;
            &lt;property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/&gt;

            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/&gt;
            &lt;property name="hibernate.max_fetch_depth" value="3"/&gt;
            &lt;property name="hibernate.show_sql" value="true"/&gt;
        &lt;/properties&gt;
    &lt;/persistence-unit&gt;
&lt;/persistence&gt;

Pode me ajudar?

Valeu.

Criado 9 de dezembro de 2010
Ultima resposta 9 de dez. de 2010
Respostas 2
Participantes 2