Оптимизация Hibernate для удаления нескольких объектов - PullRequest
2 голосов
/ 04 октября 2011

В приложении Java EE с Hibernate, в большом столе я хочу очистить несколько миллионов объектов.

Например

  1. Я получил несколько объектов, которые я хочу очистить: 2000 объектов вернули более 5000 объектов во вкладке
  2. а потом я хочу удалить их

На самом деле, пока объект существует, я делаю:

        List<Object> objectList = this.getObjectManager()
                .getObjectsByCriteria(clientName, objectType, MAX_OBJECTS);
        for (final Object object : objectList) {
            if (logger.isDebugEnabled()) {
                logger.debug("will delete " + object);
            }
            this.getMManager().removeEntry(object);
            counter++;
        }


public void removeObject(final Object object) {
    final Session session = this.getHibernateUtil().getSession();
    session.delete(entry);
    session.flush();
}

Я полагаю, что hibernate удаляет все объекты при фиксации транзакции, а не один за другим.

  1. Каково наилучшее решение для удаления, например, 2000 объектов, не имеющих памяти или исключений гибернации?

  2. Как реально удалить по одному с гибернацией?

1 Ответ

3 голосов
/ 04 октября 2011

Не извлекайте их, просто используйте некоторые критерии для удаления. Используйте HQL для таких случаев

session.createQuery("delete from MyClass where ...").setXXX(...).executeUpdate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...