如何使用 JPA 级联删除具有单向“ManyToOne”关系的实体

2024-01-04

我有两个实体类“用户”和“部门”,具有单向“ManyToOne”关系,如下所示。

public class User{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "DEPARTMENT_ID", nullable = true)
    private Department department;
}

public class Department{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

如果我想删除一些用户并级联删除引用的部门,如果没有任何用户引用该部门,请问JPA有什么功能可以使用吗?


您可以使用CascadeType.DELETE,但是此注释仅适用于EntityManager,而不是数据库。您想确定ON DELETE CASCADE被添加到数据库约束中。为了验证,您可以配置 JPA 来生成 ddl 文件。看看ddl文件,你会注意到ON DELETE CASCADE不是约束的一部分。添加ON DELETE CASCADE到实际的 SQLddl文件,然后从 ddl.xml 更新数据库架构。这将解决您的问题。

This link http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html显示如何使用ON DELETE CASCADE on for CONSTRAINT在 MySQL 中。您在约束上执行此操作。您也可以在CREATE TABLE or ALTER TABLE陈述。 JPA 可能会在ALTER TABLE陈述。只需添加ON DELETE CASCADE到该声明。

请注意,一些 JPA 实现者确实提供了实现此功能的方法。

Hibernate 确实使用以下方法提供了此功能@OnDelete注解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JPA 级联删除具有单向“ManyToOne”关系的实体 的相关文章

随机推荐