Невозможно удалить или обновить родительскую строку - JPA с Hibernate - PullRequest
2 голосов
/ 23 июля 2010

У меня есть база данных, в которой все таблицы были сгенерированы кодом Java JPA / Hibernate.Мне нужно обновить несколько таблиц в моей базе данных аналогично следующему:

UPDATE Department SET id=100000 WHERE id=0;

К сожалению, это приводит к ошибке

ОШИБКА 1451 (23000): невозможно удалить или обновитьродительская строка: сбой ограничения внешнего ключа (Departmentuserlink, CONSTRAINT FK96AF44EAB09C41C5 ИНОСТРАННЫЙ КЛЮЧ (отдел_идентификатора) Ссылки (id) отдела *

Вот сущности Java:

@Entity
@Table(name="Department")
public class Department extends AbstractEntity implements IAbstractEntity {

@OneToMany(cascade=CascadeType.ALL, mappedBy="department", fetch=FetchType.EAGER)
private Set<DepartmentJobLink> departmentJobs = new HashSet<DepartmentJobLink>(0);

    //Setters & getters and all that
}



@Entity
@Table(name="edrDepartmentJobLink",     uniqueConstraints={@UniqueConstraint(columnNames={"department_id", "job_id"})})
public class DepartmentJobLink extends AbstractEntity implements IAbstractEntity {

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="department_id", nullable=false)
private Department department;

    //Setters & getters and all that
}

у обоих есть идентификаторы в суперклассе.Пока все выглядит так, как будто все работает отлично, просто возникают проблемы с обновлением первичного ключа Департамента.Буду признателен за любой совет.Спасибо.

1 Ответ

2 голосов
/ 23 июля 2010

Ну, а какие внешние ключи есть у обновляемой таблицы?Похоже, вы не можете изменить значение department.id, потому что какая-то другая таблица имеет ограничение внешнего ключа для столбца department_id, указывающего на department.id.

Это на самом деле «хорошая вещь», поскольку это означает, что выданные достоверны.

Вам необходимо изменить оператор обновления так, чтобы вы также обновляли столбец department_id затронутой таблицы вместе с department.id (а также любыми другими затронутыми таблицами) или, по желанию, выможет ALTER ограничение внешнего ключа, чтобы изменения каскадноСинтаксис для этого зависит от реализации вашей базы данных.

На самом деле это не имеет ничего общего с JPA или Hibernate - это просто результат ограничений внешнего ключа, объявленных в вашей базе данных (которые могли прийтииз отображения Hibernate и автоматической генерации схемы базы данных из инструмента генератора схем Hibernate, но это не имеет значения).

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