Я хочу удалить определенные записи из таблицы. Эти записи имеют некоторые дочерние записи в других таблицах.
Чтобы смочь удалить основные записи, я должен удалить дочерние записи сначала.
Вот пример используемого 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 неправильно? Или это - Быть в спящем режиме причуда?
из Руководства : :
Нет присоединений, либо подразумевается, либо явный, Может быть указан в объемном запросе HQL. Подпрошимы могут быть использованы в где - пункт, где подзапросы Сами могут содержать присоединения.
Ваш IB.Booking.user.id
Пункт выглядит как присоединение ко мне. Я не знаю, если Hibernate активно отвергает присоединения в удалении оператора, или просто молча попадает неправильно.
Ницкий способ удаления детских записей является использование каскадных удалений .
Простые вопросы, которые могут помочь:
только для любопытства, вы используете этот HQL в транзакции? Выбор не нужен транзакция, но удаления нуждается в ней.
Вы промыв сеанс после выполнения удаления HQL?
Вы удаляете, и выбираете в одной и той же транзакции или в отдельные?