Inserção Cascade HIbernate JPA

2 respostas
A

Bom dia Pessoal!

Eu tenho 2 tabelas Pessoa e PessoaTelefone onde PessoaTelefone tem todos os telefones da pessoa, estou tentando fazer um inserção em cascada mais não estou conseguindo alguém poderia me ajudar?

Metodo que coloca os dados dentro do VO de Pessoa

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();
            }
        }
    }

Pessoa.java

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;
    }
    
    
}

Pessoatelefone.java

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;
    }
}

persistence.xml

&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;

No log do servidor ao inves de inserir aparece duas consultas

10/12/2010 07:36:07 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
10/12/2010 07:36:08 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
Hibernate: select PESSOA_SEQ.nextval from dual
Hibernate: select PESSOATELEFONE_SEQ.nextval from dual

Valeu.

2 Respostas

R

Esse select q aparece eh pra pegar o valor das sequences,tá certo.

Não tá inserindo nem o objeto Pessoa?

A

raf4ever:
Esse select q aparece eh pra pegar o valor das sequences,tá certo.

Não tá inserindo nem o objeto Pessoa?

Não, se na classe Pessoa eu não coloca nada no List pessoatelefones ele insere os dados da pessoa, mais quando eu coloco nao insere nada nem na Pessoa

O que será que pode ser? alguma configuração errada?

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