в спящем режиме и удалить все - PullRequest
31 голосов
/ 16 августа 2010

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

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

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

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

Ответы [ 3 ]

24 голосов
/ 16 августа 2010

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

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}
23 голосов
/ 16 августа 2010
  • если вам нечего каскадировать, используйте HQL delete DELETE FROM enityName
  • если у вас есть каскады, выполните итерацию коллекции и удалите каждый по отдельности.

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

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

6 голосов
/ 16 августа 2010
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
...