powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадные удаления и HQL
13 сообщений из 13, страница 1 из 1
Hibernate, каскадные удаления и HQL
    #33105655
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Такой вопрос: должны ли срабатывать каскадные удаления для detail таблицы в Hibernate если из master таблицы строки удаляются с использованием HQL??
если удалять объекты передавая их в метод delete сессии - каскадные удаления срабатывают. Если через HQL - вылетает foreign key violation
Так и должно быть, или я что-то не так делаю?
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33106060
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Милый Собак,
Тут дело наверно не в HQL. А вот в том, что H* все SQL запросы кеширует, и выполняет их, как ему угодно. Самый верный способ - это поотлаживать коде (в том числе и H*). Много интерестного узнаете, чес.слово! Там и буде понятно, что в какой последовательности в базу стучиться.

Ну и некий совет из страны советов. После кое-какого траха у нас в конторе решили установить тако правило - всякое изменение в базе через Stored Procedure. Я не только жабу имею ввиду, вообше все, чего ваяем. Ну, оно конечно не 100% - но 95 точно. Там какой флажек выставить - знамо процедуру городить не надо. А вот с объектами строго. Так вот, замапируй свои объекты на SP - а внутрях разбирайся, как хошь ...
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33106880
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нарыл в нетеAgain: pay real care to relational constraints. For example: using a bulk delete will not delete entries from join tables, or delete dependent objects. If you need this, and you want to use the bulk update, you will need CASCADE DELETE turned on in the database.

правда не въехал, что значит "you will need CASCADE DELETE turned on in the database" (триггеры, штоле), но смысл в том, что сам хибер так не может. Удаяляйте как persistence объекты либо несколькими запросами.

andrushok - убей не пойму, как кеширование запросов хибером влияет на внешние ключи?
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33108248
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так, от фонаря могу предпологать. Так как данных ксперементов с Н* не делал. Допустим есть нека табличка А для A объектов. А в себе содержить неку коллекцию B объектов (табличка B). Как связать - через FK: B.PARENT_ID -> A.ID например.

Теперя как вставлять
сначала в A некую суть, походу дела получам A.ID, потом в B усю коллекцию

Как удалять
Сначала в B усе, что имеет B/PARENT_ID = A.ID, потом и из A

Я таки не думаю, шо H* такой глюпий, что таку просту логику не отслеживат. Но может где-то и глючит - так что надо отлаживаться. Смотреть надо. Так как запросы выполняются не сразу а on demand - что-то и не срослося ...
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33108489
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pitbull terrier нарыл в нетеAgain: pay real care to relational constraints. For example: using a bulk delete will not delete entries from join tables, or delete dependent objects. If you need this, and you want to use the bulk update, you will need CASCADE DELETE turned on in the database.

правда не въехал, что значит "you will need CASCADE DELETE turned on in the database" (триггеры, штоле), но смысл в том, что сам хибер так не может. Удаяляйте как persistence объекты либо несколькими запросами.

Смысл в следующем: в зависимых таблицах для внешних ключей нужно указывть ON DELETE CASCADE, т.е.
Код: plaintext
1.
2.
3.
4.
5.
create table dependent (
   id int not null primary key,
   parent_id int not null,
   constraint dep_fkey (parent_id) references parent(id)  ON DELETE CASCADE
);
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33108864
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Теперя как вставлять
сначала в A некую суть, походу дела получам A.ID, потом в B усю коллекцию

>>Как удалять
Сначала в B усе, что имеет B/PARENT_ID = A.ID, потом и из A


блин
ну выгребать лучше на persistence уровне, и забыть про HQL
с удалениями - так и сделали :)


ХМ - у нас тут корпоративная политика - генерить схему на основании маппингов. При таком подходе все тонкие настройки сразу отметаются
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109009
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ведь hbm2ddl позволяет генерить схему по маппингу с правилами ON DELETE CASCADE?
Код: plaintext
1.
2.
3.
4.
5.
6.
<bag name="bids" lazy="true" inverse="true" cascade="all">
                        <key column="item" on-delete="cascade"/>
                        <one-to-many class="Bid"/>
</bag>
-- на выходе DDL
alter table Bid add constraint FK104DDEE6E7E98 foreign key (item) references AuctionItem on delete cascade
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109119
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас версия хибера и база какие?
у меня третий на postgre
везде на выходе "ON DELETE NO ACTION"
на уровне persistence-объектов каскадные удаления работают нормально
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109167
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hibernate-3.0.4, PostgreSQLDialect
P.S. Я hibernate только начинаю ковырять, никак руки не доходят наконец сесть и толком разобоаться :)
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109210
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно
вроде все так же
у меня схема генерится мейвеновским плагином у которого косяк с версиями (не хочет с работать с постгре диалектом от третьего хибераб приходится ему второй подсовывать). наверное, в этом трабл
все равно спасибо :)
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109455
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трабл скорее всего здесь :) , т.е. в hibernate 2 такой возможности нет
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109494
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://jira.codehaus.org/browse/MPHIBERNATE-14

OFF
Отметили (слегка) ДР товаришша, настроение ну никак не рабочее :)
...
Рейтинг: 0 / 0
Hibernate, каскадные удаления и HQL
    #33109511
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну плагин к третьему есть.
просто в нем schema-export с третьим диалектом не работает

товарищу привет
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадные удаления и HQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]