我有一套hibernate.hbm2ddl.auto
创建以便 Hibernate 为我在 mysql 中创建表。
但是,休眠似乎没有正确添加Cascade
关于表中的参考文献。然而,当我删除一行,并且我有一个删除级联作为休眠注释时,它确实有效。所以我猜这意味着Hibernate在运行时读取注释,并手动执行级联?
这是正常行为吗?
例如:
@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
The CascadeType
and @Cascade
定义是not翻译成 DDL,它们告诉 Hibernate 在执行操作时如何表现。
然而,有@OnDelete http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/OnDelete.html您可以在父级上使用它来获取使用适当的删除级联子句创建的外键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)