Hibernate doesn't generate cascade

cascade, hibernate, jpa, mysql, orm

Solution

The `CascadeType` and `@Cascade` definitions are not translated into DDL, they tell Hibernate how to behave when an operation is performed.

However, there is `@OnDelete` that you can use on the parent to get the foreign key created with the appropriate on delete cascade clause.

Problem

I have a set `hibernate.hbm2ddl.auto` to create so that Hibernate creates the tables in mysql for me. However, it doesn't seem that hibernate correctly adds `Cascade` on the references in the table. It does however work when I for instance delete a row, and I have a delete cascade as hibernate annotation. So I guess that means that Hibernate reads the annoation on runtime, and perform cascading manually? Is that normal behavior? For instance: ``` @Entity class Report { @OneToOne(cascade = CascadeType.ALL) public File getPdf() { return pdf; } } ``` Here I have set cascade to ALL. However, when running `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 | ``` It doesn't say anything about cascading other then the foreign key. In my opinion, it should have added the `ON DELETE CASCADE ON DELETE UPDATE`

Original source