JPA: ограничение на удаление

Как я могу добиться поведения «ON DELETE RESTRICT» в отношениях @OneToMany?

Насколько я знаю, если я не установлю CascadeType.REMOVE, дети не будут удалены, но родитель все равно будет удален. Я знаю, что этот тип каскада предназначен для объектов сущностей, но в базе данных все внешние ключи имеют «НЕТ ДЕЙСТВИЯ». Как установить тип каскада на уровне базы данных?

Я также удивлен, что не нашел ничего полезного в Google по этой теме?


person beginner_    schedule 17.04.2013    source источник
comment
Какую базу данных вы используете? Эти параметры не являются стандартом SQL, насколько мне известно. В любом случае, это не покрывается JPA, потому что JPA не является API для создания схемы базы данных. Реализации предоставляют эту возможность проприетарными способами, но в основном она используется на ранних стадиях прототипирования.   -  person JB Nizet    schedule 17.04.2013
comment
См. en.wikipedia.org/wiki/Foreign_key#RESTRICT. Это стандартный SQL. Я использую PostgreSQL. в основном я могу просто использовать NO ACTION (мое личное предпочтение — использовать RESTRICT, но на самом деле это не имеет значения).   -  person beginner_    schedule 17.04.2013
comment
Что мешает вам установить нужный параметр в вашем DDL-скрипте?   -  person JB Nizet    schedule 17.04.2013
comment
Как говорит Дж. Б. Низе, самостоятельное создание сценария DDL является рекомендуемым способом для большинства реализаций JPA. JPA2.1 позволит специфицировать такие вещи, но это еще не окончательно (и никакие реализации не полностью реализуют все это).   -  person DataNucleus    schedule 17.04.2013


Ответы (1)


Смотрите комментарий. "NO ACTION" делает то, что я хочу. Если удаление нарушает ограничение, оно не будет выполнено и будет выдано сообщение об ошибке.

person beginner_    schedule 04.06.2013