可以Session.Delete表条目,即使该表具有外键约束而没有指定删除级联或null

时间:2014-11-02 06:06:30

标签: sql-server hibernate

我是hibernate的新手,我对Hibernate在内部删除和保存执行的准确程度并不了解。

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

现有代码仍会删除原始表中的条目。

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

1 个答案:

答案 0 :(得分:0)

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

参见示例(使用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(“删除用户,其中id = 1”)。executeUpdate()可能会导致FK引用错误