Hibernate não funciona delete com cascade="all"

0 respostas
T

Bom dia senhores, tenho as seguintes classes e mapeamentos abaixo. Porém, o delete em cascade, o fecth = “join” e nem o outer-join=“true” funciona. No caso do delete ele gera apenas o sql para deletar Pessoa e não o Endereco .Estou usando Ubuntu 11.10, Netbeans 7.1.1, Mysql 5.1 e Hibernate 4.1.2. Alguém tem alguma idéia do que pode estar ocorrendo.

Classe Pessoa:

package one_to_one_PK;
// Generated 23/04/2012 13:28:57 by Hibernate Tools 3.2.1.GA

/**
 * Pessoa generated by hbm2java
 */
public class Pessoa implements java.io.Serializable {

    private int idpessoa;
    private String nome;

    public int getIdpessoa() {
        return idpessoa;
    }

    public void setIdpessoa(int idpessoa) {
        this.idpessoa = idpessoa;
    }

    public Pessoa() {
    }

    public Pessoa(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return this.nome;
    }

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

Pessoa.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 23/04/2012 13:28:57 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="hibernate_associacoes" name="one_to_one_PK.Pessoa" table="Pessoa">
    <id name="idpessoa" type="java.lang.Integer">
      <column name="idpessoa"/>
      <generator class="identity"/>
    </id>
    <property name="nome" type="string">
      <column length="40" name="nome"/>
    </property>    
  </class>
</hibernate-mapping>

Endereco.java

package one_to_one_PK;
// Generated 23/04/2012 13:28:57 by Hibernate Tools 3.2.1.GA

/**
 * Endereco generated by hbm2java
 */
public class Endereco implements java.io.Serializable {

    private int idEndereco;
    private String descEndereco;
    private int numero;
    private Pessoa pessoa;

    public Pessoa getPessoa() {
        return pessoa;
    }

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

    public String getDescEndereco() {
        return descEndereco;
    }

    public void setDescEndereco(String descEndereco) {
        this.descEndereco = descEndereco;
    }

    public int getIdEndereco() {
        return idEndereco;
    }

    public void setIdEndereco(int idEndereco) {
        this.idEndereco = idEndereco;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }
}

Endereco.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 23/04/2012 13:28:57 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="hibernate_associacoes" name="one_to_one_PK.Endereco" table="endereco">
    <id name="idEndereco" type="java.lang.Integer">
      <column name="id_endereco"/>
      <generator class="foreign">
          <param name="property">pessoa</param>
      </generator>
    </id>
    <property name="descEndereco" type="string">
      <column length="40" name="desc_endereco"/>
    </property>
    <property name="numero" type="java.lang.Integer">
      <column name="numero"/>
    </property>
    <one-to-one name="pessoa" constrained="true" outer-join="true" cascade="all" foreign-key="fk_pessoa"/>
  </class>
</hibernate-mapping>

DaoGenerico.java

package AcessoBD;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author well
 */
public class DAOGenerico<Generico> {

    private Session sessao = null;
    private Transaction transaction = null;
    private Generico generico;

    public DAOGenerico(Generico generico) {
        this.generico = generico;
        this.sessao = HibernateUtil.getSessionFactory().openSession();
    }

    public void insere() {
        try {
            transaction = sessao.beginTransaction();
            sessao.saveOrUpdate(generico);
            sessao.flush();
            transaction.commit();

        } catch (HibernateException erro) {
            JOptionPane.showMessageDialog(null, "Erro na inserção no Banco", "Erro na Inserção",
                    JOptionPane.ERROR_MESSAGE);
            transaction.rollback();
        } finally {
            sessao.close();
        }
    }

    public void excluir() {
        try {
            transaction = sessao.beginTransaction();
            sessao.clear();
            sessao.delete(generico);
            sessao.flush();
            transaction.commit();
        } catch (HibernateException erro) {
            JOptionPane.showMessageDialog(null, "Erro no delete no Banco", "Erro ao apagar",
                    JOptionPane.ERROR_MESSAGE);
            transaction.rollback();
        } finally {
            sessao.close();
        }
    }

    public void atualizar() {
        try {
            transaction = sessao.beginTransaction();
            sessao.saveOrUpdate(generico);
            sessao.flush();
            transaction.commit();
        } catch (HibernateException erro) {
            JOptionPane.showMessageDialog(null, "Erro na atualização no Banco", "Erro na Atualização",
                    JOptionPane.ERROR_MESSAGE);
            transaction.rollback();
        } finally {
            sessao.close();
        }
    }

    public List lista(String classe) {
        List lista = sessao.createQuery("from " + classe).list();
        return lista;
    }
}

HibernateUtil.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AcessoBD;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author well
 */
public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_associacoes</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">xxxxxxxx</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>  
    <property name="current_session_context_class">thread</property>
    <mapping resource="one_to_one_PK/Endereco.hbm.xml"/>
    <mapping resource="one_to_one_PK/Pessoa.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Tudo está funcionando, menos o cascade = “all”. Caso alguém deseje ver o projeto, posso enviar.

Agradeço qualquer ajuda,

Obrigado

Criado 24 de abril de 2012
Respostas 0
Participantes 1