我有两个实体类“用户”和“部门”,具有单向“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(使用前将#替换为@)