Sql server 无法执行会话。即使表具有外键约束但未指定Delete cascade或null,也可以删除表项

Sql server 无法执行会话。即使表具有外键约束但未指定Delete cascade或null,也可以删除表项,sql-server,hibernate,Sql Server,Hibernate,我对hibernate还不熟悉,我不太了解hibernate删除和保存在内部是如何执行的 我必须修改现有代码中的某些内容。代码当前使用的表确实定义了外键,但尚未在表上定义删除级联 现有代码仍然会从原始表中删除条目 我无法理解代码当前是如何处理它的。是否可以为外键删除定义一些hibernate设置,而不是在DB中定义。 如果是,那么怎么做。任何提示都会有所帮助。级联删除也可以在hibernate中定义 请参见使用JPA注释的示例: @Entity public class User { @

我对hibernate还不熟悉,我不太了解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;

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

注意使用HQL或JPQL。它不会触发级联删除,例如entityManager.createQuerydelete用户,其中id=1.executeUpdate可能会导致FK引用错误

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