2010-05-18 4 views
7

J'ai un ensemble hibernate.hbm2ddl.auto à créer pour que Hibernate crée les tables dans mysql pour moi.Hibernate ne génère pas de cascade

Cependant, il ne semble pas qu'hibernate ajoute correctement Cascade sur les références de la table. Il fonctionne cependant quand je par exemple efface une rangée, et j'ai une cascade de suppression comme annotation d'hibernation. Donc, je suppose que cela signifie qu'Hibernate lit l'annotation à l'exécution et effectue une cascade manuellement?

Est-ce un comportement normal?

Par exemple:

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

Ici, j'ai mis en cascade à TOUS. Cependant, lors de l'exécution 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 | 

Il ne dit rien d'autre en cascade alors la clé étrangère. À mon avis, il aurait dû ajouter les ON DELETE CASCADE ON DELETE UPDATE

Répondre

5

la traduction en DDL, les définitions CascadeType et @Cascade sont pas ils disent Hibernate comment se comporter lors d'une opération est effectuée.

Toutefois, il existe @OnDelete que vous pouvez utiliser sur le parent pour obtenir la clé étrangère créée avec la clause appropriée de suppression en cascade.

Questions connexes