Can会话.删除表项,即使该表具有外键约束,但未指定删除级联或null



我是hibernate的新手,我不太了解hibernate的删除和保存在内部是如何执行的。

我不得不修复现有代码中的某些内容。代码当前使用的表确实定义了外键,但尚未在表上定义删除级联。

尽管如此,现有的代码确实从原始表中删除了条目。

我不知道代码目前是如何处理它的。是否可以为外键删除定义一些休眠设置,而不是在DB中定义。如果是,那么如何。任何提示都会有所帮助。

级联删除也可以在hibernate中定义。

参见示例(使用JPA注释):

@Entity
public class User {
    @Id
    private Long id;
    @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
    private List<Address> addresses;
}
@Entity
public class Address {
    @Id
    private Long id;
    private String cityName;
    @ManyToOne
    private User user;
}

现在假设这个代码示例:

 User user =  entityManager.find(User.class, 1L);
 entityManager.remove(user);

删除用户将触发关联地址的级联删除。

注意使用HQL(或JPQL)。它不会触发级联删除,例如entityManager.createQuery("delete User where id=1").executeUpdate()将导致FK引用错误,可能是

最新更新