我有一些由 Hibernate 管理的具有各种外键约束的表。 Cascade on delete 目前由 Hibernate 单独管理。为了处理测试数据,我经常手动创建和删除一些行。如果我可以将 ON DELETE CASCADE 添加到外键约束中,这将对我有很大帮助,但我不知道 Hibernate 是否会遇到这个问题,因为数据库会在 Hibernate 之前删除内容。
很多人似乎都专注于 DDL。我的意图是不指示Hibernate 使用SQL DELETE CASCADES 创建DDL。我只想知道如果我在数据库中指定一个 ON DELETE CASCADE 除了在引用注释上有 JPA 的 cascade = CascadeType.REMOVE
是否有任何危害,例如, @ManyToOne
。
最佳答案
您可以使用 CascadeType.DELETE
,但是此注释仅适用于 EntityManager
中的对象,不适用于数据库。您希望确保将 ON DELETE CASCADE
添加到数据库约束中。为了验证,您可以配置 JPA 以生成一个 ddl 文件。查看 ddl
文件,您会注意到 ON DELETE CASCADE
不是约束的一部分。将 ON DELETE CASCADE
添加到 ddl
文件中的实际 SQL,然后从 ddl 更新数据库架构。这将解决您的问题。
这link展示了如何在 MySQL 中为 CONSTRAINT
使用 ON DELETE CASCADE
。您在约束上执行此操作。您也可以在 CREATE TABLE
或 ALTER TABLE
语句中执行此操作。 JPA 很可能在 ALTER TABLE
语句中创建约束。只需将 ON DELETE CASCADE
添加到该语句即可。
请注意,一些 JPA 实现者确实提供了实现此功能的方法。
Hibernate 确实使用 @OnDelete
批注提供此功能,因此如果您想坚持使用标准 JPA 功能,最好使用此批注或简单地更新 ddl 文件。
关于java - 我可以将 'ON DELETE CASCADE' 添加到 Hibernate 管理的表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686941/