У меня есть два объекта. Пусть это будет компания и сотрудник.
CREATE TABLE company (
company_id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
chief_id BIGINT(20) NOT NULL,
PRIMARY KEY (company_id),
CONSTRAINT fk_company_chief
FOREIGN KEY (chief_id)
REFERENCES employee (employee_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
CREATE TABLE employee(
employee_id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
company_id BIGINT(20) NOT NULL,
PRIMARY KEY (employee_id),
CONSTRAINT fk_employee_company
FOREIGN KEY (chief_id)
REFERENCES employee (company_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
А мои занятия выглядят так:
class Employee {
long id;
String name;
Company company;
}
class Company{
long id;
String name;
Employee chief;
}
Тогда я хочу удалить компанию со всеми ее сотрудниками. Я делаю это в одной транзакции. Я получаю что-то вроде "java.sql.BatchUpdateException: Column 'chief_id' cannot be null"
Я могу удалить только после обнуления одного из столбцов. Например, "chief_id BIGINT (20) NULL", а затем сделать company.chief = null перед удалением.
В проекте мы не используем каскады Hibernate, и я не могу изменить каскады базы данных.
Мы используем MySql 5.0.
Мне нужно что-то вроде: отключить ограничения-> удалить сущность-> включить ограничения. Отключенное состояние должно быть доступно только в рамках текущей транзакции. Я думал, что это было поведение по умолчанию.