Blu*_*ice 3 java hibernate jpa cascade openjpa
我有两个实体类'User'和'Department',具有单向'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;
}
Run Code Online (Sandbox Code Playgroud)
如果我想删除一些用户并级联删除引用的部门,如果没有任何用户引用该部门,是否有使用JPA的任何功能?
您可以使用CascadeType.DELETE,但此注释仅适用于EntityManager数据库中的对象,而不适用于数据库中的对象.您希望确保将ON DELETE CASCADE其添加到数据库约束中.要进行验证,您可以配置JPA以生成ddl文件.看一下这个ddl文件,你会发现ON DELETE CASCADE它不是约束的一部分.添加ON DELETE CASCADE到ddl文件中的实际SQL ,然后从ddl更新数据库架构.这将解决您的问题.
此链接显示如何在MySQL中使用ON DELETE CASCADEon CONSTRAINT.您可以在约束上执行此操作.您也可以在CREATE TABLE或ALTER TABLE声明中执行此操作.JPA可能会在ALTER TABLE语句中创建约束.只需添加ON DELETE CASCADE到该声明中即可.
请注意,某些JPA实现者确实提供了此功能的方法.
Hibernate使用@OnDelete注释提供此功能.
| 归档时间: |
|
| 查看次数: |
6419 次 |
| 最近记录: |