在@OneToMany上级联删除时Hibernate ConstraintViolationException

时间:2010-09-23 21:11:17

标签: hibernate one-to-many cascade

这似乎是一个非常简单的问题,但我一直在努力解决它。我有两个实体Client和User,其中Client是User的父级。实体注释如下:

Client:
    @OneToMany(mappedBy = "client", fetch = FetchType.LAZY)
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
    private List<User> users = new ArrayList<User>();

User:
    @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = {CascadeType.REFRESH})
    @JoinColumn(name = "client_id")
    private Client client;

    public User(Client client, String userName, String password) {
        client.getUsers().add(this);
    }

我需要在客户端删除以级联到用户。如果在一个Hibernate会话中创建客户端和用户并且在另一个Hibernate会话中删除客户端,则此方法有效。但是,如果我尝试在同一会话中删除客户端,那么永远不会发出用户上的删除,我得到org.hibernate.exception.ConstraintViolationException。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

好吧,事实证明持久服务是使用批量删除HQL语句删除客户端,这显然不会将删除级联到子用户。