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();