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

Ну и некий совет из страны советов. После кое-какого траха у нас в конторе решили установить тако правило - всякое изменение в базе через Stored Procedure. Я не только жабу имею ввиду, вообше все, чего ваяем. Ну, оно конечно не 100% - но 95 точно. Там какой флажек выставить - знамо процедуру городить не надо. А вот с объектами строго. Так вот, замапируй свои объекты на SP - а внутрях разбирайся, как хошь ...
...
Рейтинг: 0 / 0
08.06.2005, 12:16
    #33106880
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
нарыл в нете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
08.06.2005, 22:38
    #33108248
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
Я так, от фонаря могу предпологать. Так как данных ксперементов с Н* не делал. Допустим есть нека табличка А для 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
09.06.2005, 09:23
    #33108489
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
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
09.06.2005, 11:17
    #33108864
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
>>Теперя как вставлять
сначала в A некую суть, походу дела получам A.ID, потом в B усю коллекцию

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


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


ХМ - у нас тут корпоративная политика - генерить схему на основании маппингов. При таком подходе все тонкие настройки сразу отметаются
...
Рейтинг: 0 / 0
09.06.2005, 11:59
    #33109009
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
Так ведь 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
09.06.2005, 12:31
    #33109119
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
У вас версия хибера и база какие?
у меня третий на postgre
везде на выходе "ON DELETE NO ACTION"
на уровне persistence-объектов каскадные удаления работают нормально
...
Рейтинг: 0 / 0
09.06.2005, 12:42
    #33109167
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
hibernate-3.0.4, PostgreSQLDialect
P.S. Я hibernate только начинаю ковырять, никак руки не доходят наконец сесть и толком разобоаться :)
...
Рейтинг: 0 / 0
09.06.2005, 12:55
    #33109210
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
странно
вроде все так же
у меня схема генерится мейвеновским плагином у которого косяк с версиями (не хочет с работать с постгре диалектом от третьего хибераб приходится ему второй подсовывать). наверное, в этом трабл
все равно спасибо :)
...
Рейтинг: 0 / 0
09.06.2005, 14:02
    #33109455
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
трабл скорее всего здесь :) , т.е. в hibernate 2 такой возможности нет
...
Рейтинг: 0 / 0
09.06.2005, 14:12
    #33109494
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадные удаления и HQL
http://jira.codehaus.org/browse/MPHIBERNATE-14

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

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


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