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?
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.
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();
}
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();