Рейтинг@Mail.ru

Hibernate: Удаление объектов из БД.


По работе пришлось изучать работу Java’вского ORM’а, пока что знаком только бегло, но некоторые полезные штуки для новичка решил записать. Может кому пригодится, может нет, но хотя бы самому гуглить придётся меньше =). Кстати, примеры будут не на Java, а на Jython’е, т.к. с первым я тоже не очень знаком :).

Итак, опустим настройку и подключение Hibernate, предположим, что вы это уже сделали :). Быть может, напишу об этом позже. Требуется удалить из таблицы player (которая маппится с классом Player, естественно… или наоборот :) ) некоторые записи. Если мы знаем id игрока, тогда всё элементарно (как и в других случаях)):

player = session.load(Player, player_id)
session.delete(player)

Теперь рассмотрим случай, когда надо удалить много записей.

В ORM’е Hibernate несколько способов провернуть это. 1й — очевидный, с помощью createQuery выбрать все нужные записи HQL’ом и в цикле удалять по одной:

players_list = session.createQuery("FROM Player WHERE name = :name")\     .setParameter("name", "Василий")\     .list() for player in players_list:     session.delete(player)

Но это влечёт накладные расходы на получение всех нужных объектов, а затем удаление по одному, в таком случае мы выполним столько sql-запросов, сколько объектов загрузили, что может ухудшить производительность приложения. Для этого есть другой способ. Вот в общем то и он:

session.createQuery("DELETE Player WHERE name = :name")\
    .setParameter("name", "Василий")\
    .executeUpdate()

Вот таким способом можно избавиться от всех неугодных нам Василиев ;). Так же есть возможность воспользоваться сырым sql с помощью Session.createSQLQuery().

Ссылки:
Документация по Hibernate.

Программирование , , , ,

Пожалуйста, оцените полезность и качество данной статьи. Одна звезда - плохо, 5 - хорошо.
1 звезда2 звезды3 звезды4 звезды5 звёзд (2 голосов, средний: 4,50 из 5)
Loading ... Loading ...

  1. username
    6 Июнь 2010 в 21:35 | #1

    Спасибо большое) Правда, сэкономил мое время очень этой статьей.

  2. 6 Июнь 2010 в 23:57 | #2

    Всегда пожалуйста :).

    Честно сказать мне другие ORM больше понравились, hibernate достаточно сложен в освоении, если верить книжке hibernate in action, то надо запастись хотя бы 2 неделями для обучения исключительно ORM. Так что если это разовый проект и дальше с hibernate иметь дела не планируется, то стоит задуматься о целесообразности.

  1. Пока что нет уведомлений.
*