2010-05-18 19 views
7

Tengo un conjunto de hibernate.hbm2ddl.auto para crear para que Hibernate cree las tablas en mysql para mí.Hibernate no genera cascada

Sin embargo, no parece que Hibernate correctamente agrega Cascade a las referencias en la tabla. Sin embargo, funciona cuando, por ejemplo, elimino una fila y tengo una cascada de eliminación como anotación de hibernación. Entonces, supongo que eso significa que Hibernate lee la molestia sobre el tiempo de ejecución y realiza una cascada en forma manual.

¿Es ese comportamiento normal?

Por ejemplo:

@Entity 
class Report { 
    @OneToOne(cascade = CascadeType.ALL) 
    public File getPdf() { 
    return pdf; 
} 
} 

Aquí he puesto en cascada a TODOS. Sin embargo, cuando se ejecuta show create table Report

Report | CREATE TABLE `Report` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `pdf_id` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK91B14154FDE6543A` (`pdf_id`), 
    CONSTRAINT `FK91B14154FDE6543A` FOREIGN KEY (`pdf_id`) REFERENCES `File` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

No dice nada acerca de cascada otro entonces la clave externa. En mi opinión, debería haber añadido los ON DELETE CASCADE ON DELETE UPDATE

Respuesta

5

Los CascadeType y @Cascade definiciones son no traduce en DDL, le dicen a Hibernate cómo comportarse cuando se realiza una operación.

Sin embargo, hay @OnDelete que puede usar en el elemento primario para obtener la clave foránea creada con la cláusula delete on waterfall correspondiente.