Невозможно удалить запись из родительской таблицы, имеющую дочерние записи, даже после включения Cascade All - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица Department с отображением один ко многим в таблицу Employee и каскадным типом как все.

@OneToMany(mappedBy="department",orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @Fetch(FetchMode.JOIN)
    private List<Employee> emp; 

В базе данных дочерняя таблица (Employee) имеет это ограничение для внешнего ключа. enter image description here


Когда Iam удаляет запись из таблицы Department в коде Java, используя функцию Hibernate * Delete с первичным ключом в качестве параметра, * это означает удаление записи из таблицы Department, а также удаление всех связанных с ней записей в таблице Employee. Когда я выполняю запрос ниже (Dep_ref не является primaryKey)

delete from Department where Dep_ref= 99999;

Таким образом, должен удалить все записи из таблицы отделов и связанные записи в таблице сотрудников. Но , я получаю ошибку ниже.

Ошибка SQL: ORA-02292: нарушение целостности - дочерняя запись найденный 02292. 00000 - «ограничение целостности (% s.% S) нарушено - найдена дочерняя запись» * Причина: попытка удалить значение родительского ключа со сторонним зависимость. * Действие: сначала удалите зависимости, затем родительские или отключите ограничение.

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 09 мая 2018

Проблема в вашем отображении. Это в неправильном направлении. Вам необходимо создать внешний ключ для Employee to reference Department.

// Departments
@OneToMany(mappedBy="departments", cascade=CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<Employee> emp;

// Employee
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="department_id" , referencedColumnName="id", insertable=false, updatable=false)
private Departments department;
...