Hibernate 不生成级联

Posted

技术标签:

【中文标题】Hibernate 不生成级联【英文标题】:Hibernate doesn't generate cascade 【发布时间】:2011-02-20 20:05:54 【问题描述】:

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

但是,hibernate 似乎没有在表中的引用上正确添加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

【问题讨论】:

【参考方案1】:

CascadeType@Cascade 定义翻译成 DDL,它们告诉 Hibernate 在执行操作时如何表现。

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

【讨论】:

以上是关于Hibernate 不生成级联的主要内容,如果未能解决你的问题,请参考以下文章

JPA/Hibernate 级联删除不起作用

hibernate级联修改之后接着查询时,查不出来?,用hibernate做的返回对象为null,求解

Hibernate级联操作

Hibernate关联关系 Cascade级联

Hibernate:OneToMany 通过级联保存孩子

hibernate第三天