Может ли Hibernate orphanRemoval работать с уникальными ограничениями? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть 2 объекта: Role и Privilege.Одна роль имеет много привилегий.Сущности выглядят так:

@Entity
public class Role {

    private Integer id;
    private String code;
    @OneToMany(mappedBy = "role", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Privilege> privileges;
}

@Entity
public class Privilege {

    private Integer id;
    private String code;
    @ManyToOne
    @JoinColumn(name = "role_id")
    private Role role;
}

Таблица privilege имеет уникальное ограничение U__ROLE_ID__CODE__PRIVILEGE для столбцов role_id и code.

У меня есть конечная точка REST, котораяобновляет роли.Обновление также включает изменение привилегий, назначенных роли:

private static void setPrivileges(Set<Privilege> existing, Set<Privilege> privileges) {
    existing.clear();
    existing.addAll(privileges);
}

По какой-то причине, когда я выполняю обновление роли, Hibernate first вставляет новые привилегии в таблицу привилегий , итолько тогда удаляет потерянные права .В результате происходит сбой обновления с нарушением ограничения U__ROLE_ID__CODE__PRIVILEGE в случае, если новый список привилегий содержит хотя бы одну привилегию из старого списка.

Без ограничения все работает нормально.Однако удаление ограничения не выглядит идеальным решением.

Можно ли изменить порядок, в котором Hibernate обрабатывает обновление отношения ролей-привилегий, так что сначала удаляются потерянные привилегии, и только затем новыевставлен?

Проект репродукции доступен здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...