Будьте в спящем режиме; HQL; почему запрос на удаление не работает, но выбор делает?

Я хочу удалить определенные записи из таблицы. Эти записи имеют некоторые дочерние записи в других таблицах.

Чтобы смочь удалить основные записи, я должен удалить дочерние записи сначала.

Вот пример используемого HQL:

delete from ItineraryBooking ib where ib.booking.user.id = :paramId

В основном это должно удалить весь ItineraryBookings (записи в отдельной таблице), они соединены с таблицей Booking. К таблице Booking можно присоединиться с таблицей User.

Нечетная вещь - это при изменении вышеупомянутого на:

from ItineraryBooking ib where ib.booking.user.id = :paramId

И выполните Query.list (), он будет работать просто великолепно.

Каждый раз, когда я хочу выполнить удалить вариант, он похож, в спящем режиме, генерирует нечетный оператор удаления. Мой HQL неправильно? Или это - Быть в спящем режиме причуда?

5
задан Stefan Hendriks 20 January 2010 в 14:45
поделиться

2 ответа

из Руководства : :

Нет присоединений, либо подразумевается, либо явный, Может быть указан в объемном запросе HQL. Подпрошимы могут быть использованы в где - пункт, где подзапросы Сами могут содержать присоединения.

Ваш IB.Booking.user.id Пункт выглядит как присоединение ко мне. Я не знаю, если Hibernate активно отвергает присоединения в удалении оператора, или просто молча попадает неправильно.

Ницкий способ удаления детских записей является использование каскадных удалений .

7
ответ дан 14 December 2019 в 08:51
поделиться

Простые вопросы, которые могут помочь:

  1. только для любопытства, вы используете этот HQL в транзакции? Выбор не нужен транзакция, но удаления нуждается в ней.

  2. Вы промыв сеанс после выполнения удаления HQL?

  3. Вы удаляете, и выбираете в одной и той же транзакции или в отдельные?

0
ответ дан 14 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: