Hibernate不会生成级联

时间:2010-05-18 10:48:31

标签: mysql hibernate orm jpa cascade

我有一组hibernate.hbm2ddl.auto来创建,以便Hibernate为我创建mysql中的表。

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

这是正常行为吗?

例如:

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

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

1 个答案:

答案 0 :(得分:6)

CascadeType@Cascade定义转换为DDL,它们告诉Hibernate在执行操作时的行为方式。

但是,您可以在父级上使用@OnDelete来获取使用相应的on delete cascade子句创建的外键。