Спящий режим и удалить все
Каков наилучший способ удалить все строки в таблице в Hibernate?
Если я перебираю коллекцию и звоню session.delete()
, это не работает, насколько мне известно.
Если я использую другую опцию session.createQuery("delete ...")
, она не влияет на контекст сохранения.
Когда я должен использовать эти методы, если нет лучшего варианта?
Ответы
Ответ 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();