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


Автор: danik 23.7.2007, 16:08
Необходимо, используя Hibernate + Spring, удалить из базы список объектов (список формируется из отмеченных пользователем на странице строк). Каким образом можно удалить одним запросом? 
deleteAll(List) не в счёт.

Автор: necromancer 23.7.2007, 16:27
createQuery("delete form.... where ...").execute();

Автор: danik 24.7.2007, 17:55
Каким образом Вашим способом можно решить мою проблему я не понимаю: а если нужно удалить около сотни объектов из базы, каким макаром сформировать строку запроса? 

Автор: necromancer 24.7.2007, 18:04
разных объектов не связаных одним свойством? никак.
Тогда удаляем по одному.
А что бывают другие варианты? хотя бы в том же простом jdbc?
Если таковые варианты и есть то они в итоге будут иметь вид:
delete from ... where id=... or id=... or id=.. and etc
или если упрость =)
delete from ... where id IN (...,...,...,... and etc)

Автор: danik 25.7.2007, 02:39
Цитата

разных объектов не связаных одним свойством? никак.

Отчего же? вышеупомянутый deleteAll(List) (спринговый) позволяет удалить список объектов с проинициализированными id. Мне нужен просто некий аналогичный метод\подход. Такая уж задача поставлена. 
В JDBC конечно ничего подобного нету. 
Общих свойств у объектов тоже нету. Они абсолютно произвольные, выбранные пользователем. Идея с одним запросом на каждый объект недопустима.

Автор: AlexeyVorotnikov 25.7.2007, 09:38
Цитата(danik @  25.7.2007,  03:39 Найти цитируемый пост)
Общих свойств у объектов тоже нету. Они абсолютно произвольные, выбранные пользователем. Идея с одним запросом на каждый объект недопустима.

Тогда, по-моему, только как necromancer советовал.
Код

delete from table where id in (id1, id2, ....)

Автор: danik 25.7.2007, 16:29
Ну что ж, сделаем так. 
Получилось что-то вроде этого:
Код

Session s = getSession();
Query q = s.createQuery("delete from News where id in (:idMatrix)");
q.setParameterList("idMatrix", newsID);
q.executeUpdate();
s.close();

где newsID - Long[] с айдишниками. В результате hibernate сформировал запрос, который предлагал necromancer и AlexeyVorotnikov (delete from table where id in (id1, id2, ....)). 
Этот способ стократ круче, т. к. используя deleteAll(Collection) количество сгенерированных запросов равняется количеству удаляемых объектов = / 
Всем спасибо и низкий поклон smile Тема исчерпана.

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