hiberner et tout supprimer

Quelle est la meilleure façon de supprimer toutes les lignes d'une table en mode veille prolongée?

Si je parcourt une collection et appelle session.delete(), cela ne fonctionne pas à ma connaissance.

Si j'utilise une autre option session.createQuery("delete ...") cela n'affecte pas le contexte de persistance.

Quand devrais-je utiliser ces méthodes s'il n'y a pas de meilleure variante?

30
demandé sur ROMANIA_engineer 2010-08-16 14:50:36

3 réponses

  • Si vous n'avez rien à cascade, utilisez le HQL delete DELETE FROM enityName
  • Si vous avez des cascades, itérez la collection et supprimez chacune individuellement.

Le problème réside dans le fait que hibernate gère les cascades en interne, plutôt que de laisser cela à la base de données. Donc, l'envoi d'une requête ne déclenchera pas les cascades internes, donc vous aurez des incohérences / orphelins.

Si la performance est si cruciale (après tout, ce n'est pas tous les jours que l'on tronque une table), ensuite, vous pouvez avoir plus de 1 Suppression HQL pour chaque cascade - c'est-à-dire Gérer les cascades manuellement.

23
répondu Bozho 2010-08-16 12:01:34

Vous pouvez utiliser HQL pour tronquer la table

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}
23
répondu Damian Leszczyński - Vash 2010-08-16 11:02:03
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
5
répondu thelost 2010-08-16 11:01:18