Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate и jdbc. каскадное удаление


Автор: vicod 10.11.2008, 19:06
Попытаюсь описать свою проблему.
Вообщем, сначала я работал со своей базой с помощью hibernate.
Теперь я хочу переписать всё с помощью jdbc.
Между таблицами у меня имеются отношения как 1-1 так и 1-М.
За создание таблиц, если их нет в базе, отвечает hibernate.

Теперь дошёл до того момента(используя уже jdbc), когда мне надо делать удаление записей из таблицы. Мне надо применить ON DELETE CASCADE чтобы "поддержать" связи между таблицами.

В hibernate маппингах классов у меня отмечено просто cascade="all". Я так понимаю что это не приводит к созданию внешних ключей в таблице, что помогло бы мне делать каскадное удаление с помощью sql.

как с этим бороться?

Автор: Asal 11.11.2008, 12:47
Цитата(vicod @  10.11.2008,  19:06 Найти цитируемый пост)
как с этим бороться?

руками

Добавлено через 5 минут и 10 секунд
Цитата(vicod @  10.11.2008,  19:06 Найти цитируемый пост)
В hibernate маппингах классов у меня отмечено просто cascade="all". Я так понимаю что это не приводит к созданию внешних ключей в таблице, что помогло бы мне делать каскадное удаление с помощью sql.

конечно не приведет, нужно при создании базы указывать ON DELETE CASCADE

А зачем с Hibernate переходить на JDBC ?

Автор: vicod 11.11.2008, 14:26
Цитата

А зачем с Hibernate переходить на JDBC ?

так надо smile 

Цитата

конечно не приведет, нужно при создании базы указывать ON DELETE CASCADE

хотите сказать что таблицы мне надо создавать отдельным скриптом, в котором будет всё правильно написано и не пользоваться услугами хибернайта?

погуглив нашёл несколько подобных ссылок по теме, но пока ничего не помогло http://forum.hibernate.org/viewtopic.php?t=986157 и http://groups.google.com/group/nhusers/browse_thread/thread/51fa613d2d9aba99

Автор: vicod 11.11.2008, 15:55
сделал.
хибернайт диалект надо поставить org.hibernate.dialect.MySQL5InnoDBDialect, т.к org.hibernate.dialect.MySQLDialect почему-то не поддерживает ON DELETE CASCADE - баг это или фича непонятно. и ещё в маппингах надо указать cascade="all-delete-orphan" и on-delete="cascade"

Автор: Asal 11.11.2008, 17:12
Цитата(vicod @  11.11.2008,  14:26 Найти цитируемый пост)
хотите сказать что таблицы мне надо создавать отдельным скриптом, в котором будет всё правильно написано и не пользоваться услугами хибернайта?

ну это предпологалось изначально, вы же отказываетесь от услуг Hibernate, значит Hibernate не будет создавать Вам таблицы
(я там понимаю вы пользуетесь ddl - create tables)
Цитата(vicod @  11.11.2008,  15:55 Найти цитируемый пост)
хибернайт диалект надо поставить org.hibernate.dialect.MySQL5InnoDBDialect

да, надо. Это не баг и не глюк. Это особенность MySQL (что бы работал ON DELETE CASCADE надо что бы ENGINE=innodb)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)