Hibernate ConstraintViolationException при каскадном удалении в @OneToMany - PullRequest
0 голосов
/ 24 сентября 2010

Это может показаться очень простым вопросом, но я боролся с ним некоторое время. У меня есть две сущности Клиент и Пользователь, где Клиент является родителем Пользователя. Объекты аннотируются следующим образом:

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 Ответ

1 голос
/ 24 сентября 2010

Что ж, получается, что постоянная служба удаляла клиента с помощью оператора HQL массового удаления, который, по-видимому, не каскадно удаляет дочерних пользователей.

...