2010-05-18 74 views
7

我有一套hibernate.hbm2ddl.auto创建,以便Hibernate在我创建MySQL的表。休眠不会产生级联

但是,休眠似乎并没有在表中的引用上正确添加Cascade然而,当我例如删除一行,并且我有一个删除级联作为hibernate注释时,它确实有效。所以我想这意味着Hibernate在运行时读取annoation,并手动执行级联?

这是正常的行为吗?

例如:

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

这里我设置级联到所有。但是,运行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 | 

时,这并不是说有关级联其它则外键东西。在我看来,它应该已经添加了ON DELETE CASCADE ON DELETE UPDATE

回答

5

CascadeType@Cascade定义翻译成DDL,他们告诉Hibernate当执行的操作如何做人。

但是,您可以在父级上使用@OnDelete以获取使用适当的删除级联子句创建的外键。