Подтвердить что ты не робот

Спящий режим и удалить все

Каков наилучший способ удалить все строки в таблице в Hibernate?

Если я перебираю коллекцию и звоню session.delete(), это не работает, насколько мне известно.

Если я использую другую опцию session.createQuery("delete ..."), она не влияет на контекст сохранения.

Когда я должен использовать эти методы, если нет лучшего варианта?

4b9b3361

Ответ 1

  • Если вам нечего каскадировать, используйте HQL delete DELETE FROM enityName
  • Если у вас есть каскады, выполните итерацию коллекции и удалите ее по отдельности.

Проблема заключается в том, что hibernate обрабатывает каскады внутри, а не оставляет это в базе данных. Поэтому отправка запроса не вызовет внутренних каскадов, поэтому у вас будут несоответствия/сироты.

Если производительность настолько важна (в конце концов, это не каждый день, когда один обрезает таблицу), вы можете иметь более одного HQL-удаления для каждого каскада, т.е. вручную обрабатывать каскады.

Ответ 2

Вы можете использовать HQL для таблицы обрезания

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}

Ответ 3

String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();