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